如何搜索数据文件目录并打印出某个单词在每个文件中出现的次数?

如何搜索数据文件目录并打印出某个单词在每个文件中出现的次数?

这是我目前拥有的,但是它打印了作者在所有文件中出现的总次数:128367

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

但是如何分别打印每个文件的字数?

它所采用的参数也是一个包含文件的文件夹。

答案1

你可以用来grep做这个。第二个grep是过滤没有匹配的文件。

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

答案2

循环文件:

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"/*

答案3

使用 GNU 并行:

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

如果有子目录:

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

相关内容