2013-10-08 52 views
-3

我有腳本文件。使用shell腳本添加整數不起作用?

for file in *.TXT 
do 
    amount=$(less $file | grep BPR | awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}') 
    totalAmount=$(expr $totalAmount+$amount) 
done 

現在我的劇本是這樣的

for file in *.TXT 
do 
    amount=$(less $file | grep BPR | awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}') 
    echo "$totalAmount += $amount" | bc -l 
done 

echo $totalAmount 

,但是當我在$ totalAmout + = $量運行該扔了錯誤。

我需要將總量存儲在像totalAmount這樣的變量中。

請幫我

+0

怎麼樣努力$ totalAmout + $量 – Satya

+0

我已經試過這兄弟,但它不工作:( – Ricky

+2

PEBKAC:!'$ totalAmout' = '$ totalAmount' –

回答

1

在bash(> 3.0?),你可以做

((totalAmount += amount)) 

如果它不是一個錯字的問題,你可以嘗試更換您的totalAmount=$(expr $totalAmout+$amount)((totalAmount += amount))

如果您正在處理浮點數

totalAmount=`echo "$totalAmount + $amount" | bc -l` 
+0

您錯過了'$(' 。表達式))' –

+0

工作不顯示錯誤如下 ((:46691297.78:表達式語法錯誤(錯誤標記爲」 0.78" ) 我試圖添加浮點值,是因爲這一點。? ? – Ricky

+0

是的.Bash shell只處理整數 –

0

可以使用dcbc命令行計算器執行比整數加法更復雜的算術運算。

dc是反向波蘭標記,而bc比較熟悉。

0

我認爲for循環和less是多餘的。

如果您只需要totalAmount而不是在任何地方使用amount,則可以擺脫循環和浮點求和。

totalAmount = $(grep BPR *.TXT | awk <awk_script>) 

而且grep也是多餘的,如果你讓awk使用/BPR/做其工作。

totalAmount=$(awk -F'CACH' '/BPR/ {c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}' *.TXT) 
0

空間很重要,因爲expr是一個處理其參數的命令。

expr $totalAmount+$amount 

運行expr帶一個參數(假設從參數擴展無字分割的結果),而

expr $totalAmount + $amount 

運行expr與3個參數(再次,假設沒有其它字分裂)。單參數變量可以簡單地評估爲相同的字符串;它並不試圖將這個論點解析爲一個加法。

使用expr算術基本上是過時的,因爲POSIX標準包括在

totalAmount=$((totalAmount + amount)) 
0

形式算術擴展除去非基本部分之後,你的腳本是相同的:

totalAmount=$(awk -F'CACH' ' 
    /BPR/ {c=$1;sub(/[^0-9]*/,"",c);total+=c/100} 
    END {printf "%.2f", total}' *.TXT) 
0

這爲我工作。 :)啊!我花了超過12個小時,該腳本背後.. :(

amount=0 
ediAmount=0 
totalRawAmount=0 
totalEdiAmount=0 

for file in *.TXT 
do 
    amount=$(less $file | grep BPR | awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}') 
    totalRawAmount=$(echo "$amount"+"$totalRawAmount" | bc) 
done 

echo $totalRawAmount