データファイルのディレクトリを検索し、各ファイルに特定の単語が表示される回数をどのように印刷できますか?

データファイルのディレクトリを検索し、各ファイルに特定の単語が表示される回数をどのように印刷できますか?

これが私が現在持っているものですが、すべてのファイルに作成者が表示される合計回数が印刷されます:128367

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

しかし、各ファイルの単語数を別々に印刷するには?

それが取る引数はファイルを含むフォルダでもあります。

答え1

これを行うために使用できますgrep。 2つ目は、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'

関連情報