如何计算非一致时间区间下各日志事件间隔内的数据总和
实现方案
你可以使用awk工具快速完成该需求,无需额外安装依赖,文本处理效率较高:
1. 匹配示例输出格式版(输出data区间描述)
awk ' # 匹配data行,记录区间起止序号 $2 ~ /^data/ { if (start == "") start = substr($2, 5) end = substr($2, 5) } # 匹配log行,输出统计结果并重置变量 $2 ~ /^log/ { if (start == end) { printf "%s %s sum(data%d)\n", $1, $2, start } else { printf "%s %s sum(data %d-%d)\n", $1, $2, start, end } start = "" } ' 你的数据文件路径
2. 实际数值求和版(如果需要计算data的数值累加结果)
awk ' $2 ~ /^data/ { sum += substr($2, 5) + 0 } $2 ~ /^log/ { print $1, $2, sum sum = 0 } ' 你的数据文件路径
逻辑说明
- 逐行读取文件内容,根据第二个字段的类型分别处理:
- 遇到data类数据时,记录当前区间的第一个data序号和最后一个data序号,如需计算总和就累加对应数值
- 遇到log类事件时,输出当前行的时间、日志名称、对应区间的统计结果,然后清空记录变量进入下一个统计区间
内容的提问来源于stack exchange,提问作者Andy Zou
相关产品推荐
相关产品推荐

