0

bash を使用して、ファイルから unsigned long long の平均を計算しようとしています。

したがって、列に unsigned long long を含むテキスト ファイル (例: 18446743829774150033) があり、ファイル内の数値の平均を計算してファイルに出力したいと考えています。awk を試しましたが、unsigned long long では機能しないと思います。

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

誰でもこれを行う方法について何か考えがありますか?

4

1 に答える 1

1

問題は、数値が大きすぎると 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
于 2013-02-15T01:52:07.097 に答える