切割awk中的最后3位数字

时间:2014-01-17 13:39:16

标签: bash awk substitution

我正在尝试制作一个简单的单行程序bash,它输出所有正在运行的程序及其内存占用。我有一个基本的解决方案,如下所示:

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

这将打印出如下内容:

8348    urxvt
8376    urxvt
19716   X
320820  firefox

现在这样可行,但将内存输出转换为更人性更好 可读的形式,例如'320M firefox'而不是'320820 firefox'。我试过在awk中查看substr(),但我似乎无法正确使用语法。有没有人有好的建议?

3 个答案:

答案 0 :(得分:2)

您可以尝试此awk

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

答案 1 :(得分:1)

也许这可以为你做到

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

输出类似于:

  

0.082 ps
  0.089 awk
  0.053 oracle
  0.046 mingetty

答案 2 :(得分:0)

使用sed:

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

用最后的3代替所有数字。