2014-01-17 50 views
0

我正在尝试做一个简单的一行代码,我输出所有程序运行和它们的内存占用。我有一个基本的解决方案女巫如下所示:削减awk中的最后3位数

ps -ely | awk '{ print $8 "\t" $13 }' | sort -h 

这将打印出像:

8348 urxvt 
8376 urxvt 
19716 X 
320820 firefox 

现在这个工作,但它会更好有转化成更存储器输出人类 可读形式,例如'320M firefox'而不是'320820 firefox'。我试过在awk中查看substr(),但我似乎无法获得正确的语法。有没有人有一个很好的建议?

+0

有这个http://www.commandlinefu.com/commands/view/11580/find-processes-utilizing-high-memory-in-human-readable -format – njzk2

回答

2

你可以试试这个awk

ps -ely | awk '{ if($8 > 1024)print int($8/1024) "M\t" $13 ; else print $8 "K\t" $13; }' | sort -h 
+0

真棒解决方案!我<3这个网站:D –

+0

完成治疗:) !!! –

+0

这可以写得更awk-ishly:'... | awk'{print($ 8> 1024?int($ 8/1024)“M”:$ 8“K”)“\ t”$ 13}'| ...' –

1

这也许可以为你做

ps -ely | awk '{ print $8/1024/1024 "\t" $13 }' 

输出将是这样的:

0.082 PS
0.089 AWK
0.053甲骨文
0.046的mingetty

0

使用sed:

sed -r 's/^([0-9]{3})[0-9]*/\1/g' 

用3最后替代所有数字。