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
正如你所看到的,我有 3 个重复的 mysql 错误,它们的频率出现在最后。在第一个错误上,它显示为 1,在第二个错误上,它显示为 2,在第三次错误上,它显示为 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
,然后$0
使用 sub() 函数从当前输入记录中删除最后一个字段。
通过这样做,seen[$0]+=freq
我们对最后一个字段的值总结相同的日志行(最后一个字段已被排除),作为我们freq
之前在变量中保存的频率。
然后在最后,我们循环遍历数组并打印各行,然后打印它们的总频率。