我的命令如下,其打印空闲 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%