ログファイルのエラーメッセージの計算

ログファイルのエラーメッセージの計算
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:1
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:2
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:5
java.lang.NullPointerException:12
java.lang.NullPointerException:7
java.lang.NullPointerException:18
java.lang.NullPointerException:2 

ご覧のとおり、mysqlエラーが3回繰り返されており、その頻度は最後に表示されます。最初のエラーには1、2番目のエラーには2、3番目のエラーには5が表示されます。スクリプト内の合計で繰り返される行を維持したいと思います。 Javaエラーにも同じことを行います。

予想出力:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:8
java.lang.NullPointerException:39

ベストアンサー1

awk 'BEGIN{ FS=OFS=":" }
   { freq=$NF; sub(/:[^:]*$/, ""); seen[$0]+=freq }
END{ for (x in seen) print x, seen[x] }' infile

FS は入力フィールド区切り文字で、OFS は出力フィールド区切り記号です。両方ともコロンに設定し、最後のフィールドを$NF一時変数に入れ、freqsub $0()関数を使用して現在の入力レコードから最後のフィールドを削除します。

これにより、以前に変数に保存した頻度seen[$0]+=freqと同様に、最後のフィールド(最後のフィールドは除外)の値と同じログ行が要約されます。freq

次に、最後に配列を繰り返し、個々の行と全体の頻度を印刷します。

おすすめ記事