当一列与一个值匹配时如何获取不同列值的平均值

时间:2019-01-21 19:59:36

标签: shell awk

我有一个包含许多列的大数据文件。如果另一列具有特定值,我想获取某些列的平均值。

例如,如果<?php echo nl2br($array[1]['message']); ?> 然后得到$19=9.1$24$25$27$28和{{1} },然后将这些值写入文件

$32

并为$ 19列的其他两个值添加另外两行,例如11.9和13.9,结果:

$35

我看到过一个帖子"awk average part of a column if lines (specific field) match",如果第一列具有一定价值,那么它仅代表一列,但我不知道如何将解决方案扩展到我的问题。

1 个答案:

答案 0 :(得分:2)

如果您填写空白,这应该可以工作...

$ awk 'BEGIN {n=split("1.9 11.9 13.9",a)} 
             {k=$19; c[k]++; m24[k]+=$24; m25[k]+=$25; ...}
         END {for(i=1;i<=n;i++) print k=a[i], m24[k]/c[k], m25[k]/c[k], ...}' file

也许还可以处理c[k]=0条件,例如:

function mean(sum,count) {return (count==0?"NaN":sum/count)}