尝试使用bash从文件中计算无符号long-long的平均值



尝试使用bash从文件中计算无符号long-long的平均值。

所以我有一个文本文件,它的一列中有无符号的长整型(例如18446743829774150033)我想计算文件中数字的平均值,并将其输出到文件中。我尝试了awk,但我认为它不适用于unsigned long-long。

awk '{a+=$1; b++} END{print a/b}' file.txt   

有人知道怎么做吗?

问题是,当数字太大时,awk会回到浮点,从而导致不准确。您可以使用use bc,它支持任意精度:

a=($(cut -f1 file.txt))
echo "($(IFS=+; echo "${a[*]}"))/${#a[@]}" | bc

这有点神奇,但如果你去掉bc,你会看到它把一组像1 2 3这样的数字变成了(1+2+3)/3,bc可以处理它

如果你想要小数,你可以设置小数位数:

a=($(cut -f1 file.txt))
echo "scale=4; ($(IFS=+; echo "${a[*]}"))/${#a[@]}" | bc

最新更新