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

この問題を解決するのを手伝ってください。ありがとう

4

2 に答える 2

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%
于 2013-03-18T18:35:58.163 に答える
0

ファイルの行末が正しくありませんout.txt。文字は^M改行です。

実行dos2unixして、Unix の行末を使用するように変更します。

=また、変数を割り当てるときは、記号の両側にスペースを入れないでください。ここに1つあります:

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

=記号の右側のスペースを削除します。

于 2013-03-18T18:06:58.430 に答える