2014-04-29 116 views
2

我想通過awk解決bash的浮點運算限制,但是我遇到了一個語法錯誤,我遇到了問題識別。Awk中的算術運算符無效

declare -a mreal=() 
for s in $(seq 0 $((${#mint_est[@]} - 1))) 
do 
    mreal=("${mreal[@]}" "$(echo ${mreal_est[$s]} | \ 
     awk -v int="${mint_est[$s]}" -v tot="$mtotal" \ 
     '{printf("%s", $1 + (1.0 - int/$1)*tot)}')") 
done 

這裏mreal_estmint_est是由4個浮點值的每個和mtotal是設定爲浮點值的變量的陣列。來自awk的語法錯誤是:

awk: {printf("%s", $1 + (1.0 - int/$1)*tot)} 
awk:       ^syntax error 
awk: {printf("%s", $1 + (1.0 - int/$1)*tot)} 
awk:        ^syntax error 
awk: {printf("%s", $1 + (1.0 - int/$1)*tot)} 
awk:          ^syntax error 

通過循環的每次迭代。我試圖用基於awk的printf語句中定義的算術的浮點值填充數組mreal。任何想法如何可以糾正?

+1

怎麼可能被糾正?腳本是否做了不希望的事情,如果是的話,是什麼?發佈一些小樣本輸入和預期輸出。 –

+1

@EdMorton是的,我得到循環中每次迭代的三個語法錯誤。我將編輯該問題以突出顯示錯誤。我期待'mreal'數組會被填充4個基於awk的'printf'語句中定義的算術的浮點值。 – user3210541

+0

'awk'在浮點上並不是特別出色,儘管它至少具有一些能力,這使得它在該領域的'bash'之前略顯領先。你可能想看看'bc'而不是... – twalberg

回答

4

int()是一個awk功能,您不能使用int作爲變量名:

$ gawk -v int=7 'BEGIN{print int}' 
gawk: cmd. line:1: BEGIN{print int} 
gawk: cmd. line:1:    ^parse error 

$ gawk -v xint=7 'BEGIN{print xint}' 
7 
+0

就是這樣 - 我的錯誤。感謝您爲我突出顯示這個錯誤。 – user3210541