我想从文件中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
答案 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