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

おすすめ記事