1

1

awkを使用してログファイルをフィルタリングしようとしています。フィルタリングは時間ベースであり、時間範囲外のログファイルエントリは削除されますが、その範囲内のエントリは保持されます。これで、特定の時間範囲内の項目が見つかると、後続のすべての項目もその時間範囲内にあることがわかります。

これで確認は不要です。それでは、awkがこれをきちんと実行する方法はありますか?私は、フラグ変数を使用してもはやチェックがないことを示し、各行を印刷できることを意味します。しかし、「残りのすべての行を処理してください」と言う方法はありますか?

ベストアンサー1

awk 'flag == 0 || some_test { flag = 1 } flag == 1 { processing }'

これは、ブール/バイナリ「フラグ」を使用して、処理がファイルの終わりまで続くことができるタイミングを追跡します。

最初のブロックは、データが処理を開始できるポイントをテストします。問題は、some_testすでに既存のテストがあることです。どのくらいかかりますかflag == 0。テストが true の場合、フラグが切り替わり、1テストが無効になり、processingブロックが有効になります。

最後のブロックは、ユーザーをトリガーした最初の行からsome_testファイルの終わりまで、すべての行に対して実行されます。

おすすめ記事