2013-12-18 16 views
-2

(我正在尋找這個problem的Perl解決方案,因爲awk中的解決方案由於某些原因並不總是有效)。perl腳本列出所有例外情況及其發生次數

這裏是目標的摘要:我有一個文件output.txt,它包含Unexpected exception :後面是不同的例外......舉例來說,它看起來像

... 
Unexpected exception : exception1 
... 
Unexpected exception : exception2 
... 

現在我想編寫一個shell腳本summary其中總結了output.txt,特別列出了引發的異常和它們的發生次數。它應該喜歡就好:

exception1 : 9 
exception2 : 15 
... 

例外的順序並不重要,(當然,如果是發生數進行排序,這將是更好)...

一個awk解決方案是:

awk -F ' : ' '$1=="Unexpected exception"{a[$2]++} END{for (i in a) print " ", i,a[i]}' $1 

但我不知道爲什麼有時它有效,有時它不。這就是爲什麼我要在Perl中尋找解決方案。有人提出

perl -lne '$a{$1}++ if (/^(Unexpected exception) : (.*?)\s*$/); END { for $i (keys %a) { print " ", $i, $a{$i} } }' $1 

(見here),但它返回Unexpected exception177其中177是例外的總數。這不是我想要的。

任何人都可以在Perl中提出一個好的解決方案嗎?

+0

根據您的描述,這在awk中完全可行。如果你給出了'awk'腳本不起作用的邊緣情況的例子,那麼我們可以修復它。 – janos

+0

而不是僅僅改變語言,也許你可以試着找出awk解決方案爲什麼會突破。 – ThisSuitIsBlackNot

+0

我瞭解你的意見,但我的'output.txt'有幾十個Mo,很難調試...... – SoftTimur

回答

0

你的Perl反向引用是不正確的:

​​

你想

$a{$2}++ 

代替。或將第一個()轉換爲非捕獲組:(?:Un....)

+0

感謝那個......是否有可能根據事件訂購它? – SoftTimur

相關問題