如何高效解析top日志提取Epoch时间戳并计算CPU使用率?
高效提取并计算CPU使用率的单步方法
当然有更简洁高效的单步实现方式!你可以用awk工具一次性完成所有操作——它只需要遍历日志文件一次,不需要生成任何中间文件,比你之前多次调用cut+sed的流程高效得多。
1. 基础需求:提取Epoch时间戳和%id值
直接运行这条命令就能得到你想要的基础输出:
awk '{print $2, substr($8, 1, index($8, "%")-1)}' sample.txt
命令解释:
$2直接获取行中的第二个字段,也就是你需要的Epoch时间戳$8对应行中的60.2%id,字段,substr($8, 1, index($8, "%")-1)用来截取%符号之前的数值部分(即60.2)
输出效果和你期望的完全一致:
1524703273 60.2 1524703332 80.7 1524703392 80.8
2. 进阶需求:计算CPU使用率并添加注释
如果要实现100-%id的计算,同时保留注释说明,可以用printf来格式化输出:
awk '{ idle = substr($8, 1, index($8, "%")-1) usage = 100 - idle printf "%s %.1f --> (100-%.1f)\n", $2, usage, idle }' sample.txt
优化版(自定义字段分隔符)
你还可以通过设置awk的字段分隔符,让逻辑更清晰:
awk 'BEGIN {FS="[ ,%]"} { usage = 100 - $10 printf "%s %.1f --> (100-%.1f)\n", $2, usage, $10 }' sample.txt
这里把字段分隔符设为空格、逗号、%的集合,这样原来的60.2%id,会被拆分成独立的数值字段$10=60.2,不需要再做字符串截取,代码更简洁。
两种进阶命令的输出效果都是:
1524703273 39.8 --> (100-60.2) 1524703332 19.3 --> (100-80.7) 1524703392 19.2 --> (100-80.8)
为什么这个方法更好?
相比你之前多次生成中间文件的流程,awk只需要一次读取文件,避免了磁盘IO开销,同时代码逻辑更集中,更容易维护和修改。
内容的提问来源于stack exchange,提问作者user9763248
相关产品推荐
相关产品推荐

