Awk、Sed:如何解析字符串中的值并对其求和

发布于 2024-08-22 14:22:39 字数 288 浏览 6 评论 0原文

我有一个像这样的字符串,

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)...您知道如何实现此目的吗?
多谢

I've a string like this

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

it represents the Cpu usage of my unix box.
Now I need to apply awk and sed (i think) to extract the current load of my CPUs. I'd like to extract the 'us', 'sy', 'ni' values from the string and then I want to sum them.
The script should return 5.5 (1.9 + 2.1 + 1.5)... do you know how to achieve this?
Thanks a lot

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

扭转时空 2024-08-29 14:22:39

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

well, you just need one awk command. No need for other tools

$ 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
余罪 2024-08-29 14:22:39

包含 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

A pipeline with awk, sed and bc will do the trick:

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

gives:

5.5

as expected.

The awk will pull out the three fields and print them with + between them:

1.9%us,+2.1%sy,+1.5%ni,

The sed will strip out all %.., sequences where .. is any two characters (us, sy and ni in this particular case):

1.9+2.1+1.5

The bc will evaluate that and give you the answer:

5.5
︶ ̄淡然 2024-08-29 14:22:39
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
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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文