Как выполнить поиск в каталоге файлов данных и распечатать, сколько раз в каждом файле появляется определенное слово?

Это то, что я сейчас имею, однако он печатает общее количество раз, когда Author появляется во всех файлах: 128367

grep -roh 'Author' $1 | wc -w 

Однако как распечатать количество слов для каждого файла отдельно?

Также аргумент, который он принимает, – это папка с файлами.

3 Solutions collect form web for “Как выполнить поиск в каталоге файлов данных и распечатать, сколько раз в каждом файле появляется определенное слово?”

Вы можете использовать grep для этого. Второй grep – это фильтрация файлов без совпадений.

 grep -rc 'Author' ${1} | grep -v ':0$' 

Перебирать файлы:

 for file in "$1"/* ; do if [[ -f "$file ]] ; then printf %s: "$file" grep -o Author "$file" | wc -w fi done 

Вы также можете использовать Perl:

 perl -lne 'BEGIN { $c = 0 } $c++ while /Author/g; if (eof) { print "$ARGV: $c"; $c=0 } ' "$1"/* 

С GNU Parallel:

 parallel --tag 'grep -oh Author {} | wc -w' ::: *.dat 

Если есть subdirs:

 find . -name '*.dat' | parallel --tag 'grep -oh Author {} | wc -w' 
  • Понимание встроенного чтения
  • Замена переменной, содержащей \ with sed
  • Выходной сигнал в ловушке, вызвавший вызванную ловушку?
  • Дождитесь завершения загрузки нескольких файлов
  • Как выбрать количество цифр в переменной в моих сценариях?
  • Используйте sed для выбора потенциально многострочной записи журнала
  • Обновление файлов конфигурации в скрипте, который ссылается на них?
  • Как получить свой собственный IP-адрес и сохранить его в переменной в сценарии оболочки?
  • Что делает эта команда с обратной косой чертой в конце?
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Использование подстановки команд
  • Linux и Unix - лучшая ОС в мире.