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