次の機能を提供するシェルスクリプトを実装します。
入力としてログファイルが必要です。ログファイルには、側面に表示されるメッセージの表示を含むログステートメントが含まれています。
このユーティリティは、指定された時間より長くかかるすべてのタスクを一覧表示します。時間はコマンドラインから秒単位で指定されます。
入力ログファイルの例:
#<process id> <date time> <log level> <file name> <line number> <actual message>
1098 2007-02-28 15:23:09 WARN db_util.c 5928 Config file not found, using default values
1098 2007-02-28 15:23:09 INFO db_util.c 5908 Connecting to database
1098 2007-02-28 15:23:17 INFO db_util.c 5908 Connected to database
1098 2007-02-28 15:23:17 ERROR log_test.c 198 Unable to setup our satellite launch system
1098 2007-02-28 15:23:18 INFO log_test.c 198 Reconnecting to launch the satellite
1098 2007-02-28 15:23:21 INFO log_test.c 198 Reconnected. Initialize to launch the satellite.
例:上記のファイルを入力として使用し、パフォーマンスのしきい値を2秒にしてユーティリティを実行すると、次の出力が生成されます。
出力例:
1098 2007-02-28 15:23:09 INFO db_util.c 5908 Connecting to database
1098 2007-02-28 15:23:18 INFO log_test.c 198 Reconnecting to launch the satellite
私が今まで試したこと:
awk -F' ' '! /#.*$/ {print $3}' $1 | awk 'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\" +%s"|getline d; print $1,$2,d}' $1
入力ログファイルから時間列を読み取り、Unixタイムスタンプに変換します。
答え1
実際に日付を再コーディングする必要はないと思います。
awk '{split($3, p, /:/); if (prev && (prev + 2) % 60 <= p[3]) {
print line}; prev=p[3]; line=$0}' logfile