You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效解析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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:04