从命令行获取一组数字的平均值的最快方法是什么?

13

使用在nix系统上预期会找到的任何工具(实际上,如果你愿意,msdos也可以),假设你有一个每行为一个数字的流或文件,最简单/最快的方法是计算这组数字的平均数?

8个回答

17
awk ' { n += $1 }; END { print n / NR }'

此代码将累加 n 中的总和,然后通过项数(NR = 记录数量)进行除法运算。

适用于整数或实数。


不错的NR技巧,不确定要接受哪个awk答案,所以我选择了得票最多的答案! - Anthony

14

Awk

awk '{total += $1; count++ } END {print total/count}'

5

使用UNIX的Num-Utils

average 1 2 3 4 5 6 7 8 9

有趣。我在Ubuntu上安装了它,我不得不在stdin上指定数字,而不是作为参数。 - Glyph

3
perl -e 'while (<>) { $sum += $_; $count++ } print $sum / $count, "\n"';

2
使用 "st" (https://github.com/nferraz/st):
$ st numbers.txt
N      min   max    sum    mean  sd
10.00  1.00  10.00  55.00  5.50  3.03

指定一个选项以查看个人统计信息:

$ st numbers.txt --mean
5.5

(免责声明:这个工具是我自己写的:))


1
在 Powershell 中,它将是这样的。
get-content .\meanNumbers.txt | measure-object -average

当然,那是冗长的语法。如果你使用别名输入它,

gc .\meanNumbers.txt | measure-object -a

0

Ruby一行代码

cat numbers.txt | ruby -ne 'BEGIN{$sum=0}; $sum=$sum+$_.to_f; END{puts $sum/$.}'

来源


0

Perl。

@a = <STDIN>;

for($i = 0; $i < #@a; $i++)
{
   $sum += $a[i];
}

print $a[i]/#@a;

注意:我的语法可能有点不太准确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接