使用AWK计算文件中一个字母的平均表达式



我的文件有问题。输入文件的示例如下

A   0.234
B   0.345
A   0.43
B   0.323
A   0.78
B   0.45
F   0.89
L   0.34
F   0.21
L   0.3
F   0.1

我需要计算每个字母的平均表达式,这样输出就会类似于这个

A   0.4813
B   0.3727
F   0.4
L   0.32

我已经设计了我的代码,这样它就可以在文件中找到只包含一个字母的行,并计算文件中每个字母的比例。我的问题是,我是否可以继续使用这些假设来计算平均表达式,因为我不知道如何计算每个字母并添加其相应的值。

这是我的代码,stackflow的一位合作伙伴帮我完成了。

awk 'length($0)==1{a[$0]++} END{for(c in a) print c, a[c]/NR}'

您可以使用此awk:

awk '{sum[$1] += $2; ++freq[$1]} END {for (i in freq) printf "%st%.4fn", i, sum[i]/freq[i]}' file
A   0.4813
B   0.3727
F   0.4000
L   0.3200

即使你特别要求awk,当已经有很多工具为这样的工作设计时,你为什么要重新发明轮子,例如GNU datamash:

datamash -Wsg 1 mean 2 < yourFile 

打印

A       0.48133333333333
B       0.37266666666667
F       0.4
L       0.32

相关内容

最新更新