如何计算色谱柱的平均值

时间:2010-06-26 02:13:45

标签: linux shell scripting

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

5 个答案:

答案 0 :(得分:66)

awk中:

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

读作:

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

答案 1 :(得分:3)

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

答案 2 :(得分: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”

答案 3 :(得分: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

答案 4 :(得分:0)

Simple-r将使用以下行计算平均值:

r -k2 mean file.txt

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