2016-02-25 192 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

相關問題