2 つの行だけを含むようにログをフィルタリングするにはどうすればよいですか?

2 つの行だけを含むようにログをフィルタリングするにはどうすればよいですか?

私はUnixで働いています。

現在の日付の指定された時間範囲内のログから情報を取得したいと思います。たとえば、今日の00:00から09:00までのログファイルデータが必要です。

ログエントリの例:

13/10/16 14:45:02 <batchspeedchange> <BELLBD.BD77350A.G6987V00> <> FAILED FILE FORMAT VALIDATION - ERROR:-213:rawData cannot contain tokens

このようなログファイルの出力をどのように取得できますか?

答え1

表示時に日付が「HH:MM」に等しいと仮定し、日付が2番目のフィールドに表示されると仮定すると、awkを使用できます。

awk -v start=00:00 -v stop=09:00 'start <= $2 && $2 < stop' file.log

[豪言のおしゃべり]私は日付形式について非常に面倒です。ところでこれは都合ありません。 「09/10/11」は何曜日ですか? [/ノホ]

とにかく「YY/MM/DD」だとしましょう。

awk -v date="$(date +%y/%m/%d)" \
    -v start=00:00:00 \
    -v stop=09:00:00 \
    -v search="File format not found" \
'$1 == date && start <= $2 && $2 < stop && $0 ~ search' file.log

答え2

ログファイルの行が時系列になっており、00:00と00:09にイベントがあるとします。

awk '/^13\/10\/16 00:00/,/^13\/10\/16 09:00/ {print}' file.log

私は上記の内容を覚えやすく、ログを調べるのに優れたツールだと思います。これらの仮定は、本番環境で使用するには広すぎます。

関連情報