2010-06-26 184 views
23

任何人都知道我该如何计算这些列的平均值(在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 

例如:平均值(第2列)

+1

http://unix.stackexchange.com/questions/13731/is-there-a-way-to -get-the-min-max-median-and-average-of-numbers-of-numbers-in – 2015-11-21 11:14:04

回答

52

awk中:

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

阅读为:

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

...或者你可以随时使用AWK :) :) +1 – OscarRyz 2010-06-26 02:28:40

+0

非常感谢...它很简单,而且效果非常好! – Alucard 2010-06-26 03:19:56

+0

@Porges:如何访问特定的时间间隔:比方说在第二列中,我想找到元素2到6的意思? – 2016-09-26 17:21:24

1

您可以用Python的是,可在Linux中。

如果是来自一个文件,看看这个question,只需使用float。

例如:

#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”

+1

我的第一个想法可能是Python以及......但是使这个列表在这里可能过于低效,因为你只需要总和和行数。 (另外,为了它的乐趣:'开放(“mean.txt”,'r')为f:n,t = map(sum,zip(*((1,float(line。split()[1]))for line in f))); print t/n') – 2010-06-26 02:43:52

0

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

Simple-r将计算平均值,其具有以下行:

r -k2 mean file.txt 

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

3

Perl的溶液:

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

-a autosplits行成@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