Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix Awk,Sed:如何解析和求和字符串中的值_Unix_Sed_Awk - Fatal编程技术网

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

Unix Awk,Sed:如何解析和求和字符串中的值,unix,sed,awk,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)。。。你知道如何做到这一点吗? 非常感谢带有awk、sed和bc的管道将实现以下功能: echo 'C

我有一根这样的绳子

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)。。。你知道如何做到这一点吗?

非常感谢

带有
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
,在这种特殊情况下):

bc
将对此进行评估并给出答案:

5.5

你只需要一个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

这里的交易是,你尝试自己解决问题,然后发布关于具体问题的问题。谢谢尼尔,我正要回答,但我同意你的看法。对我来说,这是一个具体的问题。我被困在这上面了。也许你太聪明了,不会问这些简单的问题?对你有好处Butterworth先生为什么,伙计们?当然,这是正确的家庭作业态度,但这似乎是一个真正的问题。这里的一些真正问题是毫无疑问的,因为人们真的被难住了。我不认为“走开,再试一次”的态度对他们有多大帮助。。。你知道怎么做,所以对你来说这是一个简单的问题。这是我的第一个剧本之一,我基本上还在学习。我不知道使用awk或sed或其他东西是否可以解决我的问题(例如,我不知道bc)。无论如何,你有时间花在无用的评论上对你有好处+0将字符串转换为数字(整数)
$ 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
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