grep:どの*パターン*が一致するのか、どのテキストが一致しませんか?

grep:どの*パターン*が一致するのか、どのテキストが一致しませんか?

ローカルログチェックルールを維持するときは、どのルールが使用されなくなったかを知ることをお勧めします。私はこれを行うための合理的に効率的な方法を見つけようとしています。

つまり、かなり大量のGNU grep拡張regexp(grep -E)パターン(約700個)と大量のsyslog出力(数十億行)が与えられた場合、約700個のパターンのどれが一致するのかを確認したいと思います。まったくシステムログ行数。より良い方法は、各パターンが一致するsyslog行の数を調べることです。

最も確実な方法は、grep -c -E "$pattern" «massive-logfile»各パターンごとに約700回程度実行することです。ただし、これは特にRAMに多数のログファイルを保存できない場合は非効率的に見えます。

これを行う効率的な方法はありますか?

ベストアンサー1

awk's'によく似たwho正規表現を使用できます。grep -E

awk '!patterns_read{patterns[$0]; next}
     {for (p in patterns) if ($0 ~ p) c[p]++}
     END {
       for (p in patterns) printf "'%s' was matched %d times\n", p, c[p]
     }' patterns patterns_read=1 log files

おすすめ記事