任何人都知道如何计算这些列的平均值(在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列)
答案 0 :(得分:66)
awk中:
awk '{ total += $2 } END { print total/NR }' yourFile.whatever
读作:
答案 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)