2016-02-25 70 views
0

我的shell脚本给出了以下错误:Runtime error (func=(main), adr=5) : Divide by zero但我没有看到我可以被零除的位置?我发现其他人有类似的问题,但有解决方案是非常具体的,不能在我的脚本中复制它们。这里是我的脚本:运行时错误(func =(main),adr = 5):除以零 - 如何解决?

dir=$folder 
cd folder 

shop1=$1 
mean1=4.78 
n1=127 

shop2=$2 
mean2=4.75 
n2=324 

grep -P -o '(?=<Rating>).*' $hotel1 | 
awk '{ sub(/<Overall>/, ""; print }' | 
awk '{sum+=$1; sumsq+=$1*$1} END {print sqrt(sumsq/NR - (sum/NR)**2)}' 

grep -P -o '(?=<Rating>).*' $hotel2 | 
awk '{ sub(/<Overall>/, ""; print }' | 
awk '{sum+=$1; sumsq+=$1*$1} END {print sqrt(sumsq/NR - (sum/NR)**2)}' 

md=0.03 
d1=0.003 
d2=0.0038 
d1d2=$(echo "d1 + d2" | bc) 
sq=0.069 
tstat=$(echo "md/sq" | bc) 

我的脚本基本上最终会从我的两个数据文件计算t统计,做到这一点首先计算各档的标准偏差。谢谢你的时间。

+0

你不必混合的grep和awk这样。一个宝贵的awk可以统治他们。 – e0k

+0

我通过命令行传递这些输入'./myscript.sh shop_2344.dat shop_4121.dat' –

+0

我不认为这会是问题,因为我从这两部分获得数字输出? –

回答

3

这不是awk,这里是你必须要把自己与$前缀来砸变量问题

tstat=$(echo "md/sq" | bc) 

不用说,你的所有脚本都可以简化成一个awk

+0

这是不是也将结果舍入为整数? (可能对_t_值不好) – e0k

+0

So tstat = $(echo“$ md/$ sq”| bc)?如果那样的话那么我就不需要改变d1d2行了 –

+1

只需在awk中编写整个东西,而不必担心这样的东西。有时简单会获胜。 – e0k