0

我想从文件中 grep 多个模式,然后用 count 打印它们。我的模式就像

Error code [61440] Error Description 
Error code [61000] Error Description 
Error code [61040] Error Description 

[]包含可变长度的数字并且还包含空值,我可以使用以下命令获取计数,但要获得它,我必须查看文件并检查[].

cat  mylog.log |   grep  "Error code" | grep 61040 | wc -l

我想要的输出如下

Error code [61440] = 90
Error code [61000] = 230
Error code [61040] = 567
4

4 回答 4

3

利用cat mylog.log | grep "Error code" | sort | uniq -c

于 2013-11-14T08:38:16.287 回答
0

用于sed仅提取其中的数字[],对它们进行排序和计数。

$ sed 's/^.*\[\([0-9]*\)\].*$/\1/' < input | sort | uniq -c
1 61000
1 61040
1 61440
于 2013-11-14T08:39:26.890 回答
0
perl -lne '$x{$1}++ if(/Error code \[([^\]]*)\] Error Description/);
           END{print "$_ => $x{$_}" for(keys %x)}' your_file

测试:

> cat temp
Error code [61440] Error Description 
Error code [61000] Error Description 
Error code [61040] Error Description 
> perl -lne '$x{$1}++ if(/Error code \[([^\]]*)\] Error Description/);END{print "$_ => $x{$_}" for(keys %x)}' temp
61040 => 1
61000 => 1
61440 => 1
> 
于 2013-11-14T08:43:55.657 回答
0

尝试使用awk

awk -F'[][]' '/Error code/ {a[$2]++} END { for (x in a) printf "Error code [%s] = %d\n", x, a[x] }' mylog.log

输出样本数据

Error code [61440] = 1
Error code [61000] = 1
Error code [61040] = 1
于 2013-11-14T08:53:41.277 回答