如题,比如我要在日志文件a.log中查找ERROR1和ERROR2分别出现的次数。
要求:用一行shell解决。
我来写个改进版,不会消耗太多内存和 CPU 来排序的:
grep -o -E 'ERROR[12]' | awk '{count[$0]++} END{for(what in count) print what, count[what]}'
比用数组更省内存:
$ cat file
ERROR1
ERROR1
ERROR1
ERROR1
ERROR
ERROR2
ERROR1
ERROR1
ERROR2
ERROR2
ERROR2
ERROR3
$ awk '/ERROR1/{a++}/ERROR2/{b++}END{print "ERROR1:"a,"ERROR2:"b}' file
ERROR1:6 ERROR2:4
下面的命令:
grep -o仅输出匹配的内容,这里就是ERROR1或者ERROR2,然后用sort/uniq统计出现的个数。
更新:下面这种方法相对死板,没有grep+awk灵活。
哈,顺着依云同学的答案,如果使用awk,那可以连grep命令也可以不用。我们来试试,下面是测试的文件:
awk命令:
执行结果: