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

如何使用sed/awk从文件中进行数学运算,awk,sed,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存储这些值并进行最终计算 谢谢,如果这是最普遍的模式,那么下面的一行就足够了 cat tes

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


谢谢,

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

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

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

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

如果没有空行,则为单向:

awk -F"[=;]" '{x+=$3;y+=$3*$5}END{print y/x}' file
如果出现空行

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

如果没有空行,则为单向:

awk -F"[=;]" '{x+=$3;y+=$3*$5}END{print y/x}' file
如果出现空行

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

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

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

awk-F“[=:]*”{for(i=2;i如果键的顺序不总是相同的,您可以这样做

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

awk-F“[=:]*”{for(i=2;iIs)POSIX
awk
中允许使用正则表达式字段分隔符?POSIX
awk
中允许使用正则表达式字段分隔符吗?