Awk,Sed:如何从字符串中解析和求和值

时间:2010-02-17 12:30:07

标签: unix sed awk

我有一个像这样的字符串

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)......你知道如何实现这个目标吗? 非常感谢

3 个答案:

答案 0 :(得分:6)

好吧,你只需要一个awk命令。不需要其他工具

$ 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)

使用awksedbc的渠道可以解决问题:

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将删除所有%..,个序列,其中..是任意两个字符(ussyni情况下):

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