Подсчитать все строки, содержащие строку в каталоге с помощью grep - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть текстовый файл, путь к которому анализируется как $ 1 и строка ($ 2). Txt файл содержит столбцы Dir, Dest, и в каждой строке по пути Dest должно быть выведено количество строк в файлах в Dir, содержащих строку $ 2.

Моя идея примерно такая, но она не кажется на работу и ручная отладка не может решить проблему.

#!/bin/bash
if [ -f $1 ]
then
    tail -n +1 $1 | while IFS=, read -r col1 col2
    do
        if [ -d $col1]
        then
            grep -rn -c  “$2” $col1 * > $col2
        fi
    done
fi

Ввод с терминала это

./Script_1.sh /Users/andjela/Desktop/test.txt string

Входной файл (test.txt)

Dir,Dest
/Users/andjela/Desktop/OS/dir1,/Users/andjela/Desktop/OS/rez1.txt
/Users/andjela/Desktop/OS/dir2,/Users/andjela/Desktop/OS/rez2.txt

А пример ожидаемого файла (Dest, / Users / andjela / Desktop / OS / rez1.txt) должен выглядеть примерно так:

file1.txt: 2 (num of lines)
file2.txt: 1

1 Ответ

0 голосов
/ 18 апреля 2020

Я заметил пару вещей в вашем скрипте:

Так что с учетом этих плюс совет @ stephen-p дает следующий скрипт:

#!/bin/bash
if [ -f "$1" ]
then
    tail -n +2 "$1" | while IFS=, read -r searchdir outfile
    do
        if [ -d "$searchdir" ]
        then
            (cd "$searchdir" && grep -rn -c "$2" *) > "$outfile"
            # alternate:
            # grep -rn -c "$2" $searchdir/* > $outfile
        fi
    done
fi

Я предпочитаю альтернативное использование grep, потому что он сохраняет путь. Но это только я ...

...