将值从列赋值给变量并进行算术运算

时间:2013-03-18 18:02:11

标签: shell

我有一个out.txt文件,其值如下:

39
45
44
55
50

我想计算第1个值的增加百分比(例如:(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

请帮我解决这个问题。 感谢

2 个答案:

答案 0 :(得分:0)

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

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

另请注意,在分配变量时,=符号的任何一侧都不应有空格。你有一个:

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

删除=符号右侧的空格。

答案 1 :(得分: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%