我有命令按内存使用情况列出系统进程:
ps -A --sort -rss -o comm,pmem
Run Code Online (Sandbox Code Playgroud)
其中列出了一个表格
COMMAND %MEM
firefox 28.2
chrome 5.4
compiz 4.8
atom 2.5
chrome 2.3
Xorg 2.3
skype 2.2
chrome 2.0
chrome 1.9
atom 1.9
nautilus 1.8
hud-service 1.5
evince 1.3
Run Code Online (Sandbox Code Playgroud)
我想获得每个程序的总内存共享,而不是相同程序的每个进程。所以我可以得到像
COMMAND %MEM
firefox 28.2
chrome 11.6
compiz 4.8
atom 4.4
Xorg 2.3
skype 2.2
nautilus 1.8
hud-service 1.5
evince 1.3
Run Code Online (Sandbox Code Playgroud)
我想过使用awk
,我不太了解。结束了类似的事情:
ps -A --sort -rss -o comm,pmem | awk -F "\t" '
{processes[$0] += $1;}
{End
for(i in processes) {
print i,"\t",processes[i];
}
}'
Run Code Online (Sandbox Code Playgroud)
但它没有用。
我该如何纠正?
cuo*_*glm 10
processes[$0] += $1;
使用整行作为关联数组中的键,这不是唯一的。您必须使用$1
, 这是命令名称作为键。
尝试:
$ ps -A --sort -rss -o comm,pmem | awk '
NR == 1 { print; next }
{ a[$1] += $2 }
END {
for (i in a) {
printf "%-15s\t%s\n", i, a[i];
}
}
'
Run Code Online (Sandbox Code Playgroud)
如果要按第二个字段对输出进行排序,请尝试:
$ ps -A --sort -rss -o comm,pmem | awk '
NR == 1 { print; next }
{ a[$1] += $2 }
END {
for (i in a) {
printf "%-15s\t%s\n", i, a[i] | "sort -rnk2";
}
}
'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20945 次 |
最近记录: |