【问题标题】:Cutting the last 3 digits in awk在 awk 中剪切最后 3 位数字
【发布时间】:2014-01-22 17:45:45
【问题描述】:

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

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

这将打印出如下内容:

8348    urxvt
8376    urxvt
19716   X
320820  firefox

现在可以了,但是将内存输出转换为更人性化会更好 可读形式,例如“320M firefox”而不是“320820 firefox”。我曾尝试在 awk 中查看 substr(),但我似乎无法获得正确的语法。有人有好的建议吗?

【问题讨论】:

标签: bash awk substitution


【解决方案1】:

你可以试试这个awk

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

【讨论】:

  • 很棒的解决方案!我
  • 这可以写得更笨拙:...| awk '{print ($8>1024 ? int($8/1024)"M" : $8"K") "\t" $13}' |...
【解决方案2】:

也许这可以帮到你

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

输出类似于:

0.082 ps
0.089 awk
0.053 预言机
0.046 mingetty

【讨论】:

    【解决方案3】:

    使用 sed:

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多