如果我有一个文件示例 apache 日志文件
如何在没有时间戳的 unix 日志文件中提取最常见的错误消息
关键是最常见的错误消息应该出现在列表的顶部
答案1
cat /tmp/file
:
ERROR 1 1234
ERROR 2 1234
ERROR 3 1234
ERROR 4 1234
ERROR 4 1234
ERROR 3 1234
ERROR 2 1234
ERROR 5 1234
ERROR 1 1234
ERROR 4 1234
ERROR 1 1234
ERROR 1 1234
ERROR 1 1234
ERROR 3 1234
ERROR 2 1234
ERROR 1 1234
ERROR 4 1234
ERROR 1 1234
ERROR 4 1234
ERROR 1 1234
ERROR 2 1234
grep "ERROR" /tmp/file | sort | uniq -c | sort -r
:
8 ERROR 1 1234
5 ERROR 4 1234
4 ERROR 2 1234
3 ERROR 3 1234
1 ERROR 5 1234
第一列显示找到每个字符串的出现次数说明:
grep "ERROR" /tmp/file\ # select only ERROR string
| sort\ # order
| uniq -c\ # count duplicate items
| sort -rn # reverse order and use numeric sort
对于前 5 个错误,您可以添加|head -n5
答案2
我认为你必须砍掉时间戳才能得到独特的错误
grep '错误消息' /logfiles |切 -d' ' -f6- |排序| uniq-c|排序-nr
答案3
您可能有兴趣按特定的顺序“排序”所有 system.log 错误日期+时间也?
尝试:(仅用于日期搜索)
grep -i "Jul 18" /var/log/*.log | sort | uniq -c | sort -n
尝试:(对于特定的日期+时间搜索)
grep -i "Jul 18 16:" /var/log/*.log | sort | uniq -c | sort -n
注意:对于特定日期,首先执行 cat *.log,然后查找标头显示的内容,根据操作系统的不同,它可能会有所不同。上面的示例适用于 UNIX/MacOS,您必须根据特定操作系统的“cat /var/log/system.log”标头中的内容“手动”编辑“Jul 18 16:”。
希望这可以帮助!
:)