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

时间:2013-02-15 01:35:45

标签: bash file-io printing awk

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

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

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

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

1 个答案:

答案 0 :(得分:1)

问题是,当数字太大时,awk会回落到浮点状态,从而导致不准确。您可以使用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