awkは、レポート内のミリ秒単位の時間差を使用します。

awkは、レポート内のミリ秒単位の時間差を使用します。

以下のログファイルを解析する必要があります。

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を必要な分/秒/ミリ秒形式に変換し、既存のスクリプトと同様に、必要な形式で必要な他の情報を追加する方法を理解できることを確信しています。

おすすめ記事