
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
一時変数に入れ、freq
sub $0
()関数を使用して現在の入力レコードから最後のフィールドを削除します。
これにより、以前に変数に保存した頻度seen[$0]+=freq
と同様に、最後のフィールド(最後のフィールドは除外)の値と同じログ行が要約されます。freq
次に、最後に配列を繰り返し、個々の行と全体の頻度を印刷します。