2017-06-22 62 views
0

我想要得到的串整串,但數量後,部分基地獨特的計數應顯示獲取有關的字符串的一部分基地獨一無二的,但應打印整個字符串

抽樣日誌:

Error [VALIDATION_ERROR_OFFER_ALREADY_EXISTS] Code [VAL-00019] Message 
Error [VALIDATION_ERROR_OFFER_NOT_EXISTS] Code [VAL-00023] Message [Offer 
Error [WEB_SERVICE_CLIENT_INITIALIZATION_FAILED] Code [WS-00001] Message [Error while initializing CBCM Web Service Client.] 

現在在[]之間的第一部分的基礎上,我想在誰登錄文件數,但第一行的所有行應顯示完整

zgrep -h 'Error' my.log|awk -F'[][]' '{print $2}'|sort| uniq -c 

上面只打印

3 VALIDATION_ERROR_OFFER_ALREADY_EXISTS 
1 VALIDATION_ERROR_OFFER_NOT_EXISTS 
5 WEB_SERVICE_CLIENT_INITIALIZATION_FAILED 

但我期待那算後顯示一個完整的樣品線像

3 Error [VALIDATION_ERROR_OFFER_ALREADY_EXISTS] Code [VAL-00019] Message 
+0

您可能提供了足夠的示例輸入,我們可以使用您目前使用的代碼生成結果嗎?您提供的示例僅包含一行包含「VALIDATION_ERROR_OFFER_ALREADY_EXISTS」的單行。 – ghoti

+0

因此,如果您有3行含有[[VALIDATION_ERROR_OFFER_ALREADY_EXISTS]]的行,您希望使用count來顯示哪一行?第一個或最後一個 – Utsav

+0

你的樣本日誌中沒有'Exception',你如何提取它? – CWLiu

回答

0

打印帶有一個什麼樣的方括號中,使用現有的方法計數一起發現的第一行:

zcat your.log.gz | awk -F'[][]' ' 
    !($2 in c) {c[$2]=$0} 
    {a[$2]++} 
    END {for(i in c){printf "%4d %s\n",a[i],c[i]}} 
' 

的這裏邏輯是c[]陣列將內容首次出現時,a[]數組函數存儲作爲錯誤計數器。 END塊通過陣列(要麼會做,因爲它們共享索引),打印計數和內容。請注意,此處的輸出不一定與輸入的順序相同,但您並未將其指定爲要求。

如果你願意的話,你可以使它成爲一個命令行。爲了便於閱讀,我將其展開。