計數日誌檔案中的錯誤訊息

計數日誌檔案中的錯誤訊息
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先前在變數中保存的頻率。

然後在最後,我們循環遍歷數組並列印各行,然後列印它們的總頻率。

相關內容