首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sed/awk从文件进行数学运算

问如何使用sed/awk从文件进行数学运算
EN

Stack Overflow用户
提问于 2019-01-16 19:31:59
回答 3查看 94关注 0票数 1

我有一个文件test.txt,其中有多行共享相同的模式:

代码语言:javascript
复制
a:1;qty=2;px=3;d=4;

a:5;qty=6;px=7;d=8;

a:9;qty=10;px=11;d=12;

我想写一个简单的终端linux cmd,使用sed/awk来计算(2*3+6*7+10*11)/(2+6+10),也就是sum(qty*px)/sum(qty)。

请问,如何检索每一行的qty和px的值,然后使用awk存储这些值并进行最终计算?

谢谢,

EN

回答 3

Stack Overflow用户

发布于 2019-01-16 19:53:52

如果没有空行,则为一种方法:

代码语言:javascript
复制
awk -F"[=;]" '{x+=$3;y+=$3*$5}END{print y/x}' file

如果存在空行,

代码语言:javascript
复制
awk -F"[=;]" '!/^$/{x+=$3;y+=$3*$5}END{print y/x}' file
票数 2
EN

Stack Overflow用户

发布于 2019-01-16 19:51:00

如果这是最通用的模式,那么以下一行应该就足够了

代码语言:javascript
复制
cat test.txt | sed 's/[a-zA-Z]*[:=]//g' | awk -F';' '{ s1 += $2*$3; s2 += $2; }; END { print s1/s2; }'
票数 1
EN

Stack Overflow用户

发布于 2019-01-16 20:05:56

如果键的顺序不总是相同,您可以这样做

代码语言:javascript
复制
awk -F "[=: ]*" '{ for( i=2; i<=NF;i+=2) a[$i]=$(i+1) }
                 { num += a["px"]*a["qty"]; den+=a["qty"]}
                 END { print num/den }' file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54216177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档