我要分析日志文件并计数重复的日志条目。
我看到了这个answer,但是由于时间戳记,每个日志条目都是唯一的。
如果日志条目的格式为
Time stamp: [log message]
如何删除行首,直到[冒号] [空格],这样我才能计算它们?我猜想sed命令可以做到吗?
[编辑]
可悲的是,这对我而言是过于简化了。日志示例;
Jun 27 20:39:26 emonpi systemd[1]: Starting Clean php session files...
Jun 27 20:39:26 emonpi systemd[1]: Started Clean php session files.
Jun 27 21:09:25 emonpi systemd[1]: Starting Clean php session files...
Jun 27 21:09:26 emonpi systemd[1]: Started Clean php session files.
要搜索的唯一元素将是第一个:
(冒号)。
我希望它在日志文件中统计这些消息中的每条消息。
答案 0 :(得分:0)
假设每个日志消息都在方括号内,并且文件名是“ file.log”,这将为您提供所需的输出:
grep -E -o '\[.+?\].*' file.log | sort | uniq -c
。
对于将来的用例,建议您熟悉regular expressions。他们非常有帮助。
答案 1 :(得分:0)
感谢@pyromonk向我指出了正确的方向。
grep -E -o ':\s.*' syslog | sort -nr | uniq -cd
我需要什么。由于并非所有消息的格式都相同,因此我需要使用多个不同的正则表达式来运行它。
我了解到,grep的-o
部分会将行的匹配部分发送到sort and count。输出不是作为有序列表显示的,而是对唯一日志消息进行计数。