grep多个字符串,计数行,每个字符串的echo输出

时间:2013-11-14 08:34:43

标签: regex bash shell unix

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

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

[]包含可变长度的数字并且也包含null,我可以使用以下命令计数,但为了得到它我必须在[]之间查看文件和检查号码。

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

我想要的输出如下

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

使用sed仅提取[]内的数字,对其进行排序和计数。

$ sed 's/^.*\[\([0-9]*\)\].*$/\1/' < input | sort | uniq -c
1 61000
1 61040
1 61440

答案 2 :(得分: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
> 

答案 3 :(得分: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