複数のディレクトリにある複数の圧縮ファイルの文字列数を見つける(集計されていません)

複数のディレクトリにある複数の圧縮ファイルの文字列数を見つける(集計されていません)

「event」および「type」文字列を含む行数を見つけようとします。私が探しているファイルは複数のフォルダにあり、圧縮されています。私が望むものの総数を得ることができますが、私の目標はファイルごとの数を表示することです。これが私が現在使っているものです:

zcat /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1* | zcat /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1* | grep 'イベント' | grep 'タイプ' |

私の結果は次のとおりです

86446

しかし、私の出力は次のようになります。

result-2018-05-10.log.gz: 1000
result-2018-05-11.log.gz: 3000
result-2018-05-12.log.gz: 20000
result-2018-05-13.log.gz: 4446
result-2018-05-14.log.gz: 12000
result-2018-05-15.log.gz: 10000
result-2018-05-16.log.gz: 15000
result-2018-05-17.log.gz: 5000
result-2018-05-18.log.gz: 6000
result-2018-05-19.log.gz: 10000

どんな提案がありますか?

ベストアンサー1

2つのテストしか実行できません。

zgrep -E -c 'event.*type|type.*event' /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1*

行にtypeandが含まれているかどうかをテストすることは、後にorが含まれているかどうかをテストするのと同じですevent。 3番目のテストが必要な場合、拡張はうまくいきません。typeeventeventtype

次に、このようなものを追加すると、| sed 's#^.*/##'問題の正確な結果が得られます。


修正する:

もっと一般的なケースでは、ループが良く見えます。

for i in /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1*; do
    printf '%s: ' "$(basename "$i")"
    zcat < "$i" | grep 'filter1' | grep 'filter 2' | grep 'filter3' | wc -l
done

おすすめ記事