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

您的out.txt文件中有不正确的行尾。^M字符是回车符。

运行dos2unix以将其更改为使用 Unix 行尾。

=另请注意,分配变量时,符号两侧不应有空格。你这里有一个:

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

=删除标志右侧的空间。

于 2013-03-18T18:06:58.430 回答
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 回答