我有一个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
请帮我解决这个问题。 感谢
答案 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%