grep 特定错误消息的多个带日期标记的日志,然后确定哪个带日期标记的日志具有最大的错误消息计数

grep 特定错误消息的多个带日期标记的日志,然后确定哪个带日期标记的日志具有最大的错误消息计数

您好,正在寻找标题所示的解决方案。

我知道如何计算一个带日期标记的日志中的特定错误消息,但很难弄清楚如何在多个日志中执行此操作,然后显示哪个日志的错误消息发生率最高。

对于单个带日期标记的日志文件,例如

log1 = message.log.2022-01-07
log2 = message.log.2022-01-06
log3 = message.log.2022-01-05
log4 = message.log.2022-01-04

error message = ErrorCode123

统计日志 1 中错误消息的发生率:

grep ErrorCode123 message.log.2022-01-07 | wc -l

但是我如何在四个日志中的每个日志中自动执行此操作,以显示哪个日志的计数最多。理想情况下,也希望使用某种通配符,以便容纳遵循相同命名约定的任何给定数量的日志(不仅仅是四个),例如message.log.*

如果尝试grep以这种方式使用是不现实的,那么任何其他方法也都很棒。

答案1

倒序匹配数:

grep -c ErrorCode123 message.log.* | awk -F':' '{print $2, $1}' | sort -nr
7 message.log.2022.01-05
4 message.log.2022.01-07
3 message.log.2022.01-06

仅返回最高匹配:添加| head -1

答案2

假设一个文件包含 4 个匹配项,另一个文件包含更少的匹配项:

$ grep -n ErrorCode123 message.log.* | sort -rt: -k2,2 | sort -ut: -k1,1 | sort -rt: -k2,2 | head -1
message.log.2022-01-04:4:ErrorCode123

现在可能出现的问题是您有多个具有相同匹配数量的文件。

相关内容