2016-07-20 69 views
1

我使用調用Perl腳本執行作業的bash腳本。然後將該作業的結果追加到bash中的數組中並進行求和。打印每次Perl腳本調用後的總和。腳本運行一段時間後,它會停止打印總和,而不會顯示錯誤消息。大Bash陣列或註銷終止

例子:

for i in {1..1999}; 
do 
    fi="$(printf "%06d" $i)_sys6_uw_lipid_data.pdb" 
    r_sq_value=$(perl r_value.pl "$fi") 
    all_r_sq_values+=($r_sq_value) 

sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${all_r_sq_values[@]}" 
) 

echo "$sum <--- SUM" 

done 

腳本作品就好了一段時間,但劇本停止打印總和很長一段時間後。

例子:

... skipping ... 
5.20884e+06 <--- SUM 
5.22297e+06 <--- SUM 
5.23754e+06 <--- SUM 
5.25246e+06 <--- SUM 
5.26714e+06 <--- SUM 
5.28179e+06 <--- SUM 
5.29737e+06 <--- SUM 
<--- SUM 
<--- SUM 
<--- SUM 
<--- SUM 
<--- SUM 

沒有錯誤,我不知道這是因爲腳本,或者是由於計算機被終止作業,由於它進入休眠狀態。它讀取的所有數據文件都已滿,並可單獨使用Perl腳本。

任何建議或意見表示讚賞。

謝謝

+1

'fi'並不似乎是一個好變量名稱(見if..fi) –

+0

我有正確的「網絡連接」變量,但腳本仍然有相同的問題。 –

+0

我懷疑你已經達到了awk參數列表長度的限制。很容易將數組中的所有元素添加到一起而不使用awk,並且我建議您在shell代碼中執行此操作。 – Borodin

回答

0

將其更改爲:

for i in {1..1999}; 
do 
    fi="$(printf "%06d" $i)_sys6_uw_lipid_data.pdb" 
    r_sq_value=$(perl r_value.pl "$fi") 
    ((all_r_sq_values += ($r_sq_value))) 

sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}'  "${all_r_sq_values[@]}" 
) 

echo "$sum <--- SUM" 

done 
+2

如果你突出顯示了你所做的更改,並解釋你爲什麼認爲他們會幫助 – Borodin

+0

@Borodin,那我會如何突出顯示? – michael501