cuonglm answer resolve seu erro, para obter os valores na ordem crescente (conforme solicitado em seu comentário), canalize a saída por sort -n -k 2
(classifique como números ( -n
, no segundo campo ( -k 2
), depois de alterar o comando print para gerar os floats como no seu exemplo:
$ ps -A --sort -rss -o comm,pmem | awk '
NR == 1 { print; next }
{ a[$1] += $2 }
END {
for (i in a) {
printf "%-15s\t%.1f\n", i, a[i];
}
}
' | sed 's/%MEM/-1MEM/' | sort -n -k 2 | sed 's/-1MEM/%MEM/'
Saída (usando sua tabela como entrada em vez de fazer ps
no meu sistema):
COMMAND %MEM
evince 1.3
hud-service 1.5
nautilus 1.8
skype 2.2
Xorg 2.3
atom 4.4
compiz 4.8
chrome 11.6
firefox 28.2
Alternativamente, você pode canalizar a saída através deste programa python (se você quiser ordenação decrescente (como no seu exemplo), altere o reverse=False
para reverse=True
:
#! /usr/bin/env python
# coding: utf-8
import sys
import operator
d = {}
for line in sys.stdin:
try:
name, val = line.split()
val = float(val)
d.setdefault(name, [0.0])[0] += val
except ValueError:
print line,
for x in sorted(d.items(), reverse=False, key=operator.itemgetter(1)):
print "{:16s}{:>4}".format(x[0], x[1][0])