我想在过去5分钟内得到平均负荷的四舍五入。所以这就是我的命令:
uptime | awk -F, '{print $5}'|printf "%.0f\n"
似乎不正确,因为它总是给我0。
如果我试图将变量用作awk和printf之间的中间值,那么它是正确的
avgload=$(uptime | awk -F, '{print $5}')
printf "%.0f\n" $avgload
第一次尝试有什么问题吗?
谢谢和问候!
更新:
只是为了获得过去5分钟的平均负载,这是我的linux服务器(Kubuntu)的正常运行时间输出
$ uptime
13:52:19 up 29 days, 18 min, 15 users, load average: 10.02, 10.04, 9.58
在我的笔记本电脑(Ubuntu)上它是类似的
`$ uptime
13:53:58 up 3 days,12:02,8位用户,平均负载:0.29,0.48,0.60`
这就是我参加第5场比赛的原因。
答案 0 :(得分:9)
来自正常运行时间输出的第5个逗号分隔字段是不存在的(至少在我的系统上),这就是为什么你不断变为零的原因。 5分钟的正常运行时间是倒数第二个字段,因此可行:
uptime | awk '{printf "%.0f\n",$(NF-1)}'
答案 1 :(得分:3)
最简单的版本(使用内置的awk printf - kudos Dennis Williamson):
uptime |awk -F, '{printf "%0.f\n",$5}'
原始答案:改为通过xargs运行。
uptime |awk -F, '{print $5}' |xargs printf "%0.f\n"
答案 2 :(得分:1)
你可以做到
printf "%.0f\n" `uptime | awk -F, '{print $5}'`
反引号本质上是命令替换,因此无论uptime | awk -F, '{print $5}'
的输出是什么,都将成为printf
的参数。
第一种方法的问题是printf不接受来自stdin
的参数;如果它 从stdin
获取参数,那么它本来可以正常工作。此外,printf没有任何参数显然意味着“为我的论点添加零”。
$ echo hello | printf "%s"
$ printf "%s" hello
hello
$ printf "%.0f"
0
答案 3 :(得分:1)
我认为你不能在stdin上输入printf。试试这个版本:
printf "%.0f\n" `uptime | awk -F, '{print $5}'`
答案 4 :(得分:1)
如果安装了/ proc,可以使用/ proc / loadavg:
LANG=C
read _ uptime _ </proc/loadavg
printf "%.0f\n" $uptime
以上代码仅使用内置shell命令。然而, 如果你愿意,也可以使用awk:
awk '{printf "%.0f\n",$2}' /proc/loadavg