如何将 awk 数学输出限制为小数点后两位

如何将 awk 数学输出限制为小数点后两位

我的命令如下,其打印空闲 CPU 和已用 CPU 格式如下。我想将 awk 输出限制为小数点后两位。

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} {free=($5)*100/($2+$3+$4+$5)} END {print "Used Cpu:",usage "%"} {print "Free Cpu:",free "%"}'

输出 :

Free Cpu: 98.9588%

Used Cpu: 1.04125%

期望的输出:

Free Cpu: 98.95%

Used Cpu: 1.04%

答案1

一些代码审查:

  • awk 可以做 grep 所做的事情,所以你不需要管道
  • 向 awk 代码添加换行符以提高可靠性

例如:

awk '$1 == "cpu" {
  printf "Used Cpu: %5.2f%%\n", 100*($2+$4)/($2+$4+$5)
  printf "Free Cpu: %5.2f%%\n", 100*$5/($2+$3+$4+$5)
}' /proc/stat

输出对齐良好的

Used Cpu:  5.34%
Free Cpu: 94.63%

答案2

另一种方法是定义一个输出格式化OFMT="%5.2f%%"到格式化全部数字输出:

$ awk -v OFMT="%5.2f%%" '
         $1 == "cpu" {
                       print( "Used Cpu: ", 100*($2+$4)/($2+$4+$5) )
                       print( "Free Cpu: ", 100*$5/($2+$3+$4+$5) )
                     }
         ' /proc/stat


Used Cpu:   9.52%
Free Cpu:  90.48%

相关内容