列出所有异常及其出现次数的脚本

时间:2013-09-22 13:07:28

标签: bash shell grep

我编写了一个分析文件的分析器,并返回不同的结果:GOODBADUnexpected exception :,后跟不同的例外...我的makefile在一组文件上逐个运行此分析器,并将整个结果放在一个文件output.txt中。所以output.txt如下所示:

file "f1.txt"
...
GOOD
file "f2.txt"
...
Unexpected exception : exception1
...
Unexpected exception : exception2
...

现在我想编写一个shell脚本summary,它总结了output.txt,特别列出了引发的异常及其出现次数。它应该像:

exception1 : 9
exception2 : 15
...

例外的顺序并不重要(好吧,如果它按事件的数量排序,那就更好了)......

我知道grep "Unexpected exception" output.txt | wc -l将返回所有异常的出现次数,但我确实需要知道每次引发的异常的发生...

有谁知道如何编写这个summary脚本?

2 个答案:

答案 0 :(得分:1)

您可以使用awk:

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

答案 1 :(得分:1)

Awk可能是你最好的选择。我强烈建议您查看the GNU Awk User Guide以获取更多信息,因为awk在您的情况下非常强大且有用。

这会做你想要的(比其他答案更可读)......

awk '/Unexpected exception/ { for (i = 4; i <= NF; i++) freq[$i]++ } END { for (word in freq) printf "%s : %d\n", word, freq[word] }' output.txt

i = 4是您要使用的字符串的位置($1=Unexpected $2=exception $3=: $4=exception1。请尝试将其更改为i = 2并查看您获得的内容。