我有一个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位来缩短小数位。
答案 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