使用Awk按日期聚合文件并统计匹配次数总和的实现方法
单Awk命令实现按日期聚合日志统计
直接使用以下命令即可完成按日期聚合、统计第5列等于"1927"的总匹配次数,输出格式为日期,总次数:
awk -F' {2,}' ' BEGIN { OFS = "," } $5 == "1927" { cnt++ } ENDFILE { date = substr(FILENAME, 35, 10) date_total[date] += cnt cnt = 0 } END { for (d in date_total) { print d, date_total[d] } } ' /log/msg/sched/xxyyzz/*_table.log
命令说明
- 分隔符设置:
-F' {2,}'指定日志内容的字段分隔符为2个及以上空格,和你原分步命令的规则一致。 - 输出格式初始化:
BEGIN块设置输出字段分隔符为逗号,确保最终输出符合日期,次数的要求。 - 单文件统计:遍历日志行,每遇到第5列等于"1927"的记录,就将当前文件的计数器
cnt加1。 - 按日期累加:每个文件处理完成后(
ENDFILE块),从文件名中提取日期(通过substr(FILENAME, 35, 10)截取固定位置的10位日期字符串),并将当前文件的统计数累加到对应日期的总计数器date_total[date]中,随后重置cnt为0,准备处理下一个文件。 - 最终输出:所有文件处理完毕后,
END块遍历所有日期的统计结果,按要求格式输出。
效果验证
- 若处理单个日期的日志文件(如
2023-01-31),所有文件匹配次数均为0时,输出为:2023-01-31,0 - 若处理多日期的日志文件(如
2023-01-30、2023-01-31、2023-02-01),每个日期总次数均为0时,输出为:2023-01-30,0 2023-01-31,0 2023-02-01,0
内容的提问来源于stack exchange,提问作者HattrickNZ
相关产品推荐
相关产品推荐

