1

我编写了一个分析器,它分析一个文件,并返回不同的结果:GOOD, BADUnexpected 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脚本?

4

2 回答 2

1

您可以使用 awk:

awk -F ' : ' '$1=="Unexpected exception"{a[$2]++} END{for (i in a) print i,a[i]}' output.txt
于 2013-09-22T13:16:52.513 回答
1

awk 可能是你最好的选择。我强烈建议您查看GNU Awk 用户指南以获取更多信息,因为 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并查看您得到的结果。

于 2013-09-22T13:46:32.857 回答