2016-08-23 3 views
0

Я пытаюсь подсчитать несколько вхождений некоторого текста для каждого файла в каталоге. Следующий сценарий близок к тому, что я хочу, но это не в счет нескольких вхождений на той же строке:Подсчитайте несколько вхождений некоторого текста для каждого файла в каталоге

grep -rc 'blah' /some/path --include \*.txt 

Например, данные два файла:

foo.txt 
blah, hey blah 
some more text 

bar.txt 
something blah 

выше сценарий производит:

foo.txt:1 
bar.txt:1 

Но выход я ищу это *:

foo.txt:2 
bar.txt:1 

Я знаю, что общее число вхождений можно найти в одном файле с помощью Grep, а затем конвейеру результатов Количество слов:

grep -oh 'blah' foo.txt|wc -l 

Как это сделать для нескольких файлов, чтобы добиться вывода, как в моем примере * выше?

Update

Лучшее решение, которое я мог придумать выглядит следующим образом:

find /some/path -name '*.txt'|awk '{print "echo -n '\''" 
    $0 "\: '\'' && grep -oh '\''blah'\'' " $0 "|wc -l"}'|bash 

ответ

1

Grep -o отпечатками каждый матч на новой линии - тогда рассчитывать Em Up

dir=$1 
grep -Hor --include '*.txt' 'blah' $dir| 
uniq -c| 
# output after uniq 
#  3 dir/f0.txt:blah 
#  2 dir/f1.txt:blah 
awk '{file=gensub(/^.+\/|:.+/, "", "g", $2); print file ":" $1}' 
Смежные вопросы