我编写了一个分析文件的分析器,并返回不同的结果:GOOD
,BAD
,Unexpected 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
脚本?
答案 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
并查看您获得的内容。