当我试图使用awk计算平均值和标准差时,我得到“awk:fatal:除以零的尝试”错误。
我的命令是
awk '{s+=$3} END{print $2"\t"s/(NR)}' >> mean;
awk '{sum+=$3;sumsq+=$3*$3} END {print $2"\t"sqrt(sumsq/NR - (sum/NR)^2)}' >>sd
有人知道如何解决这个问题吗?
答案 0 :(得分:7)
你的麻烦就是......你除以零。
您有两个命令:
awk '{s+=$3} END{print $2"\t"s/(NR)}' >> mean;
awk '{sum+=$3;sumsq+=$3*$3} END {print $2"\t"sqrt(sumsq/NR - (sum/NR)^2)}' >>sd
第一个命令从标准输入读取到EOF。然后运行第二个命令,尝试读取标准输入,但发现它是空的,因此读取的记录为零,因此NR
为零,并且您除以0,然后崩溃。
您需要在一个命令中处理均值和标准偏差。
awk '{s1 += $3; s2 += $3*$3}
END { if (NR > 0){
print $2 "\t" s1 / NR;
print $2 "\t" sqrt(s2 / NR - (s1/NR)^2);
}
}'
这可以避免被零除错误。