0

尝试使用 bash 从文件中计算 unsigned long long 的平均值。

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

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

有人对如何做到这一点有任何想法吗?

4

1 回答 1

1

问题是当数字太大时,awk 会退回到浮点数,从而导致不准确。您可以使用 a 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
于 2013-02-15T01:52:07.097 回答