如何消除awk致命零除错误

如何消除awk致命零除错误,awk,Awk,当我试图使用awk计算平均值和标准偏差时,我得到了“awk:fatal:division by zero”错误 我的命令是 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 有人知道如何解决这个问题吗?你的问题是。。。你正在除以零 您有两个命令: awk '{s+=$

当我试图使用awk计算平均值和标准偏差时,我得到了“awk:fatal:division by zero”错误

我的命令是

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

有人知道如何解决这个问题吗?

你的问题是。。。你正在除以零

您有两个命令:

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);
            }
         }'

这可以避免被零除的错误。

我可以做一些事情吗?awk'如果(NR>0){s+=3}结束{print$2“\t”s/(NR)}'>>平均值;
END
块是故障发生的地方。事实上,你的提议在语法上是错误的;如果省略了
if
,它将“起作用”,但仍然会被零除,输入为空。