如何用bash中的bc计算超大数字

时间:2017-01-31 18:23:38

标签: bash math bc

我有一个1800行的文件,看起来像这样

600.76
600.66
700.44
566.66
Ect..

我制作了一个bash脚本来计算平均值。

现在我首先创建了一个变量来计算总列数,如:

Lines="$(awk 'END{print NR}' file.txt)"

然后另一个变量为该列的总和,如下所示:

Sum="$(awk '{s+1=$1}END {print s}' file.txt)"

最后我发现这样的意思:

Echo "scale=2 ; $Sum / $Lines" | bc

启用调试后返回:

+echo 'scale=2 ; 1.72161e+06 / 1800'
(Standard_1): syntax error

我意识到现在bc不做科学记谱法,但我该如何解决这个问题。

我可以通过将小数限制为2或3位来缩短小数位。

2 个答案:

答案 0 :(得分:0)

使用bc -l进行求和和最终除法:

sum=0
count=0
while read number; do
  number=$(printf "%f\n" $number) # get rid of scientific notation
  sum=$(echo "$sum" '+' "$number" | bc -l)
  count=$((count + 1))
done < input
avg=$(echo $sum / $count | bc -l)
echo $avg

答案 1 :(得分:0)

不必使用awk。简单的oneliner可以完成这项工作。

echo "scale=2; ("$(paste -sd+ file.txt)")"/$(wc -l <file.txt)|bc