エラーを引き起こすプロセスラインに対してのみgrep

エラーを引き起こすプロセスラインに対してのみgrep

複数のプロセスで実行されるサービスがあり、すべてのログが1つの巨大なログを形成します(理由は尋ねないでください)。次のようになります。

process1: bla bla bla
process2: ha ha ha
process3: tarara **error_has_happened**
process3: details of the error here
process1: bla bla bla
process3: more details of the error here
process2: ha ha ha

このエラーはすべてのプロセスで発生する可能性があるため、grepにすべてのプロセスでこのエラーを見つけるようにしたいと思います。

process3: tarara **error_has_happened**
process3: details of the error here
process3: more details of the error here

だから基本的に検出されたエラーが発生しましたそしてそれが起こるプロセスを説明し、そのプロセスから次のN行だけを印刷します。これは、他のプロセスのエラー詳細ログがインターリーブされないと仮定して、このエラーが発生するすべてのプロセスに対して発生する必要があります。

grepだけを使ってこれを行うことはできますか?どのように?

ベストアンサー1

次のことができます。

grep "error_has_happened" -A3 logfile.log

ここで、3はerror_has_happenedが発生した後に表示される行数です。ただし、ここではエラーを送信したプロセスの出力だけでなく、他のプロセスの出力も表示されます。

クイックテストで私に役立つ詳細なコマンドは次のとおりです。

grep "error_has_happened" logfile.log | cut -d : -f1 | sort -u |
  while IFS= read -r process; do
    grep "^$process:" logfile.log |
      grep -A3 "error_has_happened"
  done

おすすめ記事