尝试使用 bash 从文件中计算 unsigned long long 的平均值。
所以我有一个文本文件,它在一列中有无符号长长(例如18446743829774150033),我想计算文件中数字的平均值并将其输出到文件中。我试过 awk 但我认为它不适用于 unsigned long long。
awk '{a+=$1; b++} END{print a/b}' file.txt
有人对如何做到这一点有任何想法吗?
问题是当数字太大时,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