我如何计算一列的平均值

任何人都知道我如何计算一个这些列(在Linux上)的意思?

sda 2.91 20.44 6.13 2.95 217.53 186.67 44.55 0.84 92.97 sda 0.00 0.00 2.00 0.00 80.00 0.00 40.00 0.22 110.00 sda 0.00 0.00 2.00 0.00 144.00 0.00 72.00 0.71 100.00 sda 0.00 64.00 0.00 1.00 0.00 8.00 8.00 2.63 10.00 sda 0.00 1.84 0.31 1.38 22.09 104.29 74.91 3.39 2291.82 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 

例如:mean(第2列)

AWK:

 awk '{ total += $2 } END { print total/NR }' yourFile.whatever 

阅读为:

  • 对于每一行,将第2列添加到变量“total”中。
  • 在文件末尾,打印“总数”除以记录数。

Perl解决方案:

 perl -lane '$total += $F[1]; END{print $total/$.}' file 

-a将该行自动插入@F数组,该数组从0开始索引
$. 是行号

如果您的字段用逗号分隔而不是空格:

 perl -F, -lane '$total += $F[1]; END{print $total/$.}' file 

要打印所有列的平均值,请将总计分配给数组@t:

 perl -lane 'for $c (0..$#F){$t[$c] += $F[$c]}; END{for $c (0..$#t){print $t[$c]/$.}}' 

输出:

 0 0.485 14.38 1.74 0.888333333333333 77.27 49.8266666666667 39.91 1.29833333333333 434.131666666667 

您可以使用python,在Linux中可用。

如果这是来自一个文件,看看这个问题 ,只是使用浮动。

例如:

 #mean.py def main(): with open("mean.txt", 'r') as f: data = [map(float, line.split()) for line in f] columnTwo = [] for row in data: columnTwo.append( row[1] ) print sum(columnTwo,0.0) / len( columnTwo ) if __name__=="__main__": main() 

打印14.38

我只是将数据包含在mean.txt文件中,而不是行标题:“sda”

大卫Zaslavsky为它的乐趣:

 with open("mean.txt", 'r') as f: n,t = map(sum, zip(*((1, float(line.split()[1])) for line in f))) print t/n 

Simple-r会用下面一行来计算平均值:

 r -k2 mean file.txt 

为第二列。 它也可以做更复杂的统计分析,因为它使用R环境进行所有的统计分析。