我有一个像这样的字符串
Cpu(s): 1.9%us, 2.1%sy, 1.5%ni, 94.5%id, 0.8%wa, 0.0%hi, 0.1%si, 0.0%st
它表示我的unix框的Cpu使用情况
现在我需要应用awk和sed(我认为)来提取CPU的当前负载。我想从字符串中提取'us','sy','ni'值,然后我想总结它们。
脚本应返回5.5(1.9 + 2.1 + 1.5)......你知道如何实现这个目标吗?
非常感谢
答案 0 :(得分:6)
$ str="Cpu(s): 1.9%us, 2.1%sy, 1.5%ni, 94.5%id, 0.8%wa, 0.0%hi, 0.1%si, 0.0%st"
$ echo $str | awk '{print $2+$3+$4+0}'
5.5
答案 1 :(得分:1)
使用awk
,sed
和bc
的渠道可以解决问题:
echo 'Cpu(s): 1.9%us, 2.1%sy, 1.5%ni, 94.5%id, 0.8%wa, 0.0%hi, 0.1%si, 0.0%st'
| awk '{print $2"+"$3"+"$4}'
| sed 's/%..,//g'
| bc
给出:
5.5
正如所料。
awk
将拉出三个字段并在它们之间打印+
:
1.9%us,+2.1%sy,+1.5%ni,
sed
将删除所有%..,
个序列,其中..
是任意两个字符(us
,sy
和ni
情况下):
1.9+2.1+1.5
bc
会对此进行评估并给出答案:
5.5
答案 2 :(得分:0)
cpu='Cpu(s): 1.9%us, 2.1%sy, 1.5%ni, 94.5%id, 0.8%wa, 0.0%hi, 0.1%si, 0.0%st'
echo $cpu|sed 's/^Cpu.*: //;s/%..,*//g'|cut -f1-3 -d" "|tr " " "+"|bc