怎样用shell查出日志文件中记录的错误日志的次数(多关键字)

发布于 2022-08-26 16:24:57 字数 72 浏览 12 评论 0

如题,比如我要在日志文件a.log中查找ERROR1和ERROR2分别出现的次数。

要求:用一行shell解决。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

神爱温柔 2022-09-02 16:24:57

下面的命令:

grep -o -E 'ERROR[12]'| sort | uniq -c

grep -o仅输出匹配的内容,这里就是ERROR1或者ERROR2,然后用sort/uniq统计出现的个数。

更新:下面这种方法相对死板,没有grep+awk灵活。

哈,顺着依云同学的答案,如果使用awk,那可以连grep命令也可以不用。我们来试试,下面是测试的文件:

# cat /tmp/a.log
ERROR1
ERROR1
ERROR1ERROR1
ERROR
ERROR2ERROR1
ERROR1
ERROR2
ERROR2
ERROR2
ERROR3

awk命令:

awk '/ERROR[12]/ { 
        err1_cnt+=gsub(/ERROR1/, "");
        err2_cnt+=gsub(/ERROR2/, ""); 
    } 

    END { 
        print err1_cnt, err2_cnt;
    }' /tmp/a.log

执行结果:

6 4
溺深海 2022-09-02 16:24:57

我来写个改进版,不会消耗太多内存和 CPU 来排序的:

grep -o -E 'ERROR[12]' | awk '{count[$0]++} END{for(what in count) print what, count[what]}'
狂之美人 2022-09-02 16:24:57

比用数组更省内存:

$ 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文