各クライアントに1つずつ、複数のディレクトリに存在するログファイルがあります。次のコマンドを実行しようとしています。
find . -iname "20140926.log" -exec cat {} \; | grep 123456 | grep 'food="100"' | wc -l
これにより、目的の結果が返されますが、各フルパスの個々の数が何であるかを知りたいです。たとえば、私はこれを試しました:
for f in "/path/*"; do
result=`eval grep 123456 "$f/logs/20140926.log" | grep 'food="100"' | wc -l`
echo "$f - $result"
done
しかし、私のすべてのディレクトリのリストと最終結果のみが返されます。私は次のことを期待しています:
/path1/log/file.log - 0
/path2/log/file.log - 2
/path3/log/file.log - 39
etc...
これにより、各パス/ファイルのgrepのトイレを表示できます。
ベストアンサー1
grep -H
ファイル名は印刷されますが、複数のgrepを実行するため、ファイル名を直接エコーできます。
for f in $(find . -name '20140926.log'); do
echo -n "$f "
grep 123456 $f | grep -c 'food="100"' # grep -c prints count of matches
done