2013-02-15 39 views
0

嘗試使用bash從文件中計算unsigned long long的平均值。嘗試使用bash從文件中計算無符號long long的平均值

所以我有很長很長已經無符號的列(如18446743829774150033) 一個文本文件,我想計算數字的平均值文件,並輸出到的文件中。我嘗試過awk,但我認爲它對於未簽名的long long來說不起作用。

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

任何人有任何想法如何做到這一點?

回答

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 
+0

NICE!這將恢復到相同的文件? – Bukk 2013-02-15 01:53:22

+0

它不修改文件,如果這就是你要求的 – 2013-02-15 01:54:22

+0

如何讓它跳過第一行並重新輸出到同一文件的末尾? – Bukk 2013-02-15 01:55:56

相關問題