Shell脚本如何统计并打印当前日期不同错误信息及其出现次数
问题原因
你写的第三行命令存在逻辑错误:printf '%s' "ErrorMessageEventPersister" /home/dev/Medha/finalfile.txt会直接把「错误名字符串+文件路径字符串」拼接后输出给管道,管道后的grep仅统计这个拼接字符串里的匹配数,自然只会得到1,完全没有读取finalfile.txt的实际内容。
方案1:仅统计特定错误ErrorMessageEventPersister的出现次数
直接把文件作为grep的输入参数即可,不需要printf语句:
# 仅输出统计次数 grep -c "ErrorMessageEventPersister" /home/dev/Medha/finalfile.txt > final1.txt # 输出「错误信息 出现次数」的格式 echo "ErrorMessageEventPersister $(grep -c "ErrorMessageEventPersister" /home/dev/Medha/finalfile.txt)" > final1.txt
方案2:统计所有不同错误信息的出现次数(匹配你最初的需求)
不需要拆分多步生成中间文件,一行命令即可完成全流程,大文件处理效率更高:
grep "$(date +"%y-%m-%d")" /home/dev/Medha/artim-session.log | grep "ERROR" | awk -F 'ERROR' '{print $2}' | sort | uniq -c | awk '{print $2" "$1}' > final1.txt
注:上面命令默认提取
ERROR关键词之后的所有内容作为错误信息,如果你的错误信息是固定列的内容,可以把awk -F 'ERROR' '{print $2}'改成对应列的提取逻辑,比如错误信息在每行第5列就写awk '{print $5}'。
内容的提问来源于stack exchange,提问作者Medha
相关产品推荐
相关产品推荐

