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

时间:2019-01-16 11:31:59

标签: awk sed

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

a:1;qty=2;px=3;d=4;

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

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

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

请问,如何获取每行中qty和px的值,然后使用awk存储值并进行最终计算?

谢谢

3 个答案:

答案 0 :(得分:1)

没有空行的一种方法:

Place: {
  additionalInformation: () => { return {}; }
}}

如果存在空行,

awk -F"[=;]" '{x+=$3;y+=$3*$5}END{print y/x}' file

答案 1 :(得分:0)

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

cat test.txt | sed 's/[a-zA-Z]*[:=]//g' | awk -F';' '{ s1 += $2*$3; s2 += $2; }; END { print s1/s2; }'

答案 2 :(得分:0)

如果按键的顺序不总是相同,则可以

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