我有一个文件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;我想写一个简单的终端linux cmd,使用sed/awk来计算(2*3+6*7+10*11)/(2+6+10),也就是sum(qty*px)/sum(qty)。
请问,如何检索每一行的qty和px的值,然后使用awk存储这些值并进行最终计算?
谢谢,
发布于 2019-01-16 19:53:52
如果没有空行,则为一种方法:
awk -F"[=;]" '{x+=$3;y+=$3*$5}END{print y/x}' file如果存在空行,
awk -F"[=;]" '!/^$/{x+=$3;y+=$3*$5}END{print y/x}' file发布于 2019-01-16 19:51:00
如果这是最通用的模式,那么以下一行应该就足够了
cat test.txt | sed 's/[a-zA-Z]*[:=]//g' | awk -F';' '{ s1 += $2*$3; s2 += $2; }; END { print s1/s2; }'发布于 2019-01-16 20:05:56
如果键的顺序不总是相同,您可以这样做
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 }' filehttps://stackoverflow.com/questions/54216177
复制相似问题