2013-03-18 85 views
0

我有具有這樣值的out.txt文件:分配值和做算術計算

39 
45 
44 
55 
50 

欲計算從第一值(實施例的增加%:(45 -39)* 100/39 = 15.38%)。所以輸出會是這樣:

0% 
15.38% 
12.8% 
41.03% 
28.21% 

所以我寫了一個bash腳本是這樣的:

*#!/bin/bash 
    a=(`cat "out.txt"`) 
    length=${#a[*]} 
    echo $length 
    x=${a[0]} 
    echo $x 
    for ((i = 1; i <= $length; i++)) 
    do 
y=${a[$i]} 
echo $y 
diff= `echo "scale=2; ($y-$x)*100/$x" | bc` 
    echo $diff 

但這個腳本是這樣產生錯誤:

( standard_in)1:非法字符:^ M (standard_in)1:非法字符:^ M (standard_in)1:非法字符:^ M

請幫我解決這個問題。 謝謝

回答

0
{ 
    read first 
    echo "0%" 
    while read value; do 
     printf "%.2f%%\n" $(bc <<< "100*($value-$first)/$first") 
    done 
} << END 
39 
45 
44 
55 
50 
END 

結果

0% 
15.38% 
12.82% 
41.03% 
28.21% 
+0

謝謝。解決了我的問題 – 2013-03-18 19:47:18

0

您的out.txt文件中有不正確的換行符。 ^M字符是回車符。

運行dos2unix將其更改爲使用Unix行尾。

另請注意,分配變量時=符號的兩側不應有空格。您在此處有一個:

diff= `echo "scale=2; ($y-$x)*100/$x" | bc` 

刪除=符號右側的空格。

+0

但我仍然有同樣的錯誤味精 – 2013-03-18 19:19:00