Всяка операционна система предлага функционалност за търсене на низ във файлове: като например конзолната команда grep в Unix/Linux.
В едно директорно дърво може да има:
- поддиректории, на произволна дълбочина на влагане
- текстови файлове
Целта на програмата е да намери всички срещания на даден символен низ в текстовите файлове в това дърво.
За всяко такова срещане, на конзолата или в определен файл (в зависимост от подадените параметри) трябва да се изведе ред в следния формат:
path:line_number:line_text
където:
pathе относителният път на файла спрямо началната директорияline_numberе номерът на реда във файла, като броенето започва от 1line_textе съдържанието на реда, включващ търсения низ
С цел ефективност, решението е многонишково, т.е. няколко паралелно изпълняващи се нишки си разпределят работата, като се синхронизират по подходящ начин, така че резултатът да е коректен.
Всяка grep команда има следния вид:
grep *[-w|-i] [string_to_find] [path_to_directory_tree] [number_of_parallel_threads] *[path_to_output_file]
- -w|-i - параметри по избор
- -w - указва на
grepкомандата да търси само цели думи (т.е "hi" няма даmatch-не "hippo", но щеmatch-не "hi there") - -i - указва на
grepкомандата да игнорираcase sensitivity(т.е "hi" e същото като "Hi")
- -w - указва на
- string_to_find - търсения низ
- path_to_directory_tree - път до корена на директорното дърво
- number_of_parallel_threads - максималния брой паралелно изпълняващи се нишки
- path_to_output_file (параметър по избор) - път до файл, в който да се запише изходът от изпълнението на командата
grep. Ако този параметър не е указан, тогава изходът от програмата трябва да се изведе на конзолата.
*параметри по избор