2017-02-24 162 views
2

循環時,我有這樣的文件:「)語法錯誤:無效的算術運算符(錯誤標記爲」具有陣列

<Overall>3 
<Overall>1 
<Overall>4 
<Overall>5 
... 

我試着整體標籤後讀的數字,把它們放在一個數組並與他們做的工作後,添加結果總

array=($(grep '<Overall>' "$file" | cut -d'>' -f 2)) 

    total=0 
    for each in "${array[@]}" 
    do 
     total+=$(awk -v awkEach="${array[$each]}" 'BEGIN{print (awkEach-4.78)^2}') 
    done 

,但我得到:「)語法錯誤:無效的算術運算符(錯誤標記爲」

我讀了所有類似的問題並嘗試了不同的東西,但似乎沒有任何工作。

+0

我不知道這是否是你唯一的問題,但你需要'聲明-i總= 0'如果你想使用'+ =' (())'和'$(())'等算術表達式之外的運算符。 – Fred

+0

副本說明發布錯誤的原因,但它不是腳本的唯一問題。您可以使用下面發佈的更簡單的解決方案,或者修復您的問題,使用'total = $(awk -v total =「$ total」-v awkEach =「$ each」'BEGIN {print total +(awkEach-4.78)^ 2} ''而不是1.因爲循環中的bash循環超過值,而不是索引,2. bash不能用小數添加數字。 –

回答

4

可以取代所有與此,

$ awk -F'>' '{sum+=($2-4.78)^2} END{print sum}' file 

18.1136