在 shell 脚本变量定义中执行浮点运算

在 shell 脚本变量定义中执行浮点运算

据我了解bash,其他一些解释器仅对整数执行算术运算。在下面的for循环中,我怎样才能做到这一点?我读过bc可以使用但不知道bc在这种情况下如何使用。

total=0
for number in `cat /path/to/file`; do
        total=$(($total+$number))
done
average=$(($total/10))
echo Average is $average

文件:

1.143362
1.193994
1.210489
1.210540
1.227611
1.243496
1.260872
1.276752
1.294121
1.427371

答案1

您可能不想用于bc此目的。也许awk会更好:

awk '{sum+=$1};END{print sum/NR}' /path/to/file

答案2

已标记,这是bash4.0 的替代方案乔罗巴回答,避免wcsed

bash-4.2$ mapfile -t a < file

bash-4.2$ (IFS='+'; echo "(${a[*]})/${#a[@]}") | bc -l
1.24886080000000000000

答案3

我通常用于bc浮点运算:

file=1.txt
echo '('$(<$file)')/'$(wc -l < $file) | sed 's/ /+/g' | bc -l

答案4

term=0
file=input
for number in `cat "$file"`; do
        term="${term}+${number}"
done
total="$(echo "$term" | bc -l)"
average="$(echo "${total}/10" | bc -l)"
average="$(echo "$average" | sed -e 's/^\(.*\..*[^0]\)0*/\1/' -e p)"
echo "Total: ${total}"
echo "Average: ${average}"

相关内容