如何从top命令输出中仅提取PID、%CPU和%MEM列数据
提取top命令指定PID、%CPU、%MEM列的实现方法
核心思路
top的批量模式(-b参数)输出为纯文本、按空白字符分隔固定列,直接通过列提取工具保留目标字段即可,优先使用系统默认自带的awk工具处理,无需安装额外依赖。
可直接复用的命令
1. 极简版(适配你当前的top输出环境)
你当前环境下输出列顺序固定:第1列为PID、第9列为%CPU、第10列为%MEM,直接在原有命令后拼接awk处理逻辑即可,输出格式完全匹配你的预期:
top -b -p 1665,2398 -n 1 -o -PID | tail -n +7 | awk 'BEGIN{print "PID %CPU %MEM"} NR>1{printf "%-4s %-4s %s\n",$1,$9,$10}'
执行后输出效果:
PID %CPU %MEM 1665 0.0 2.6 2398 0.0 0.3
2. 兼容版(适配不同top版本/列顺序变动场景)
如果后续切换系统、top版本变化导致列顺序调整,可以用动态匹配表头的写法,自动定位PID、%CPU、%MEM所在列,不会因为列位置变化提取错误:
top -b -p 1665,2398 -n 1 -o -PID | tail -n +7 | awk ' NR==1 { for(i=1;i<=NF;i++) { if($i=="PID") c_pid=i if($i=="%CPU") c_cpu=i if($i=="%MEM") c_mem=i } printf "%-4s %-4s %s\n","PID","%CPU","%MEM" next } { printf "%-4s %-4s %s\n",$c_pid,$c_cpu,$c_mem }'
说明
- 命令中
awk的printf用于控制列对齐,和你要求的输出格式完全一致 - 全程使用系统默认自带工具,不需要额外安装任何软件包
- 原有top命令的
-n 1参数指定只输出1次结果,适合脚本中采集进程指标使用
内容的提问来源于stack exchange,提问作者Ashutosh Malik
相关产品推荐
相关产品推荐

