以下のログファイルを解析する必要があります。
09/03/2020 00:05:03.364 Aggregated 1000 NMEs at a rate of 0 NMEs/sec
09/03/2020 00:05:03.366 Scheme S20_SessionClassAggregation tree contained 1000 nmes, 500 flushed, 0 remain.
09/03/2020 00:05:03.582 Flushed 1000 NMEs at a rate of 0 NMEs/sec
09/03/2020 00:20:03.598 Aggregated 2000 NMEs at a rate of 0 NMEs/sec
09/03/2020 00:20:03.602 Scheme S20_SessionClassAggregation tree contained 2000 nmes, 1000 flushed, 0 remain.
09/03/2020 00:20:03.860 Flushed 2000 NMEs at a rate of 0 NMEs/sec
009/03/2020 00:05:03.582
レポートの最後に、3行()から1行(09/03/2020 00:05:03.364
)まで、6行()から4行()までのタイムスタンプ差を計算する必要があります09/03/2020 00:20:03.860
。つまり、「集計」と関連する「更新」の時間差を計算する必要があります。09/03/2020 00:20:03.598
ログエントリの。
次のプログラムを試しましたが、awk
期待どおりに機能せずにどのように使用するのかわかりませんawk
。
awk '$3 == "Aggregated" {Agg_date=$1" "$2;Aggregated=$4}
$3=="Flushed" {Flush_date=$1" "$2;Flushed=$4}
$4=="S20_SessionClassAggregation" {S20_Flushed=$9}
{printf Aggregated" "S20_Flushed" "Flushed " "Flush_date" "Agg_date "\n"}' test.txt
予想される結果:
Aggregated S20_Flushed Flushed Flush_date Agg_date Tme difference between
Flushdate - Agg_date
1000 500 1000 09/03/2020 00:05:03.582 09/03/2020 00:05:03.364 0 min 0 sec 218 ms
2000 1000 2000 09/03/2020 00:20:03.860 09/03/2020 00:20:03.598 0 min 0 sec 262 ms
.
.
.
ベストアンサー1
以下は、あなたが要求した計算を実行するためにGNU awkを使用する方法ですmktime()
。
$ cat tst.awk
$3 == "Aggregated" {
aggDt = $1 " " $2
}
$3 == "Flushed" {
fluDt = $1 " " $2
aggMs = dt2ms(aggDt)
fluMs = dt2ms(fluDt)
difMs = fluMs - aggMs
print fluDt, aggDt, difMs
}
function dt2ms(dt, t, ms) {
split(dt,t,"[/ :.]")
ms = mktime(t[3]" "t[1]" "t[2]" "t[4]" "t[5]" "t[6]) * 1000 + t[7]
return ms
}
。
$ awk -f tst.awk file
09/03/2020 00:05:03.582 09/03/2020 00:05:03.364 218
09/03/2020 00:20:03.860 09/03/2020 00:20:03.598 262
msを必要な分/秒/ミリ秒形式に変換し、既存のスクリプトと同様に、必要な形式で必要な他の情報を追加する方法を理解できることを確信しています。