行が見つからない場合は、「0」を含む特定のパターンに一致する行数を計算する最も簡単な方法は何ですか?

行が見つからない場合は、「0」を含む特定のパターンに一致する行数を計算する最も簡単な方法は何ですか?

特定の行を含めることはできますが、必ずしもそうである必要はない非常に大きなログ(1日に数ギガバイト)があります。毎日各行の発生回数を計算する必要があります。

patterns.in必要な行を含むファイルがあります。たとえば、

aaaa
bbbb
cccc
dddd
eeee
ffff

ログファイルは次のとおりです。

asd
dfg
aaaa
aaaa
sa
sdf
dddd
dddd
dddd
dddd
ghj
bbbb
cccc
cccc
cccc
fgg
fgh
hjk

最初の(おそらく最も明確な)方法は、を使用してgrep次のようにsort実行することです。uniq

grep -f patterns.in logfile.txt | sort | uniq -c

次の結果を提供します。

   2 aaaa
   1 bbbb
   3 cccc
   4 dddd

私が達成しようとしている目標に近いが、望む結果は次のとおりです。

   2 aaaa
   1 bbbb
   3 cccc
   4 dddd
   0 eeee
   0 ffff

だから質問例:ファイルの1行がpattern.in一致しない場合は、「0」をどのように印刷しますか?私が持っているすべてなので、最も簡単な方法で行う必要があります。シグウィン環境。

ベストアンサー1

パターンごとに1つ以上の一致が見つかるようにパターンファイルをデータファイルに返し、各一致について報告された最終数から1を減算するにはどうすればよいですか?

grep -f patterns.in logfile.txt patterns.in | cut -f2 -d':' | sort | uniq -c | awk '{print($1 - 1" "$2)}'

おすすめ記事