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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:54:21