我有一个文件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存储值并进行最终计算?
谢谢
答案 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