当我试图使用awk计算平均值和标准差时,我得到"awk:致命:除零尝试"错误.
我的命令是
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
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何解决这个问题?
你的麻烦是......你除以零.
你有两个命令:
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
Run Code Online (Sandbox Code Playgroud)
第一个命令从标准输入读取到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);
}
}'
Run Code Online (Sandbox Code Playgroud)
这避免了被零除错误.