我正在尝试编写一段代码来打印 macOS 上运行的前 10 个进程。但是当我运行此代码时,top -l 1 -u -o cpu -n10 | awk 'NR==12, NR==22 {print $2,$3,$8}';
输出并未以包含行和列的表格格式进行组织。如何格式化输出?
PS我尝试过这个top -l 1 -u -o cpu -n10 | awk 'BEGIN {printf("%s %10s %8s \n" ,"NAME", "%CPU", "MEM")} {printf("%s %10f %8s\n",NR==12, NR==22, $2, $3, $8)}';
,但它也不起作用(它甚至没有显示正确的数据。
答案1
这是我得到的top -l 1 -u -o cpu -n10 | awk 'NR==12, NR==22 {print $2,$3,$8}';
:
COMMAND %CPU MEM
WindowServer 0.0 574M+
Google Chrome 1
kernel_task 0.0 1183M+
postbox 0.0 1027M+
Google Chrome 1186+
coreaudiod 0.0 6416K+
Google Chrome 1
Telegram 0.0 364M+
Google Chrome 1
Slack Helper 1
这是具有行和列的表格。如果你想更好地格式化它,你可以将它通过管道传输到column
.
top -l 1 -u -o cpu -n10 | awk 'NR==12, NR==22 {print $2,$3,$8}' | column -t
:
COMMAND %CPU MEM
WindowServer 0.0 549M+
Google Chrome 1
kernel_task 0.0 1174M+
postbox 0.0 1027M+
Google Chrome 1185+
coreaudiod 0.0 6416K+
Google Chrome 1
Telegram 0.0 365M+
Google Chrome 1
Slack Helper 1
编辑:由于top
用空格分隔这些字段,因此解析出正确的列会出现问题。通过设置列-stats
可能会更好:
top -l 1 -u -o cpu -n10 -stats command,cpu,mem | awk '/COMMAND/{y=1;next}y'
WindowServer 0.0 560M+
Google Chrome He 0.0 402M+
kernel_task 0.0 1170M+
postbox 0.0 1027M+
Google Chrome 0.0 235M+
coreaudiod 0.0 6408K+
Google Chrome He 0.0 161M+
Telegram 0.0 364M+
Google Chrome He 0.0 107M+
Slack Helper (Re 0.0 307M+
答案2
尝试使用 ps 命令。能够获得表格格式的输出。
ps axo command,%cpu,%mem|awk 'NR <=11'
COMMAND %CPU %MEM
/usr/lib/systemd/systemd -- 1.0 1.3
[kthreadd] 0.0 0.0
[ksoftirqd/0] 0.0 0.0
[kworker/0:0] 0.0 0.0
[kworker/0:0H] 0.0 0.0
[kworker/u2:0] 0.0 0.0
[migration/0] 0.0 0.0
[rcu_bh] 0.0 0.0
[rcu_sched] 0.2 0.0
[watchdog/0] 0.0 0.0