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