如何打印每行的最大值和平均值

时间:2015-03-11 13:36:04

标签: awk

是否可以使用awk进行打印?

输入

        t1      t2      t3      t4      tn
l1      0       0.1448  0.2295  0.2896  0.3362
l3      0.1395  0.1395  0.1395  0.1395  0.4421
l4      0.5779  0.138   0.09591 0.05014 0.138

输出

        t1      t2      t3      t4      tn      max      avg.of.rest
l1      0       0.1448  0.2295  0.2896  0.3362  0.3362  0.166
l3      0.1395  0.1395  0.1395  0.1395  0.4421  0.4421  0.140
l4      0.5779  0.138   0.09591 0.05014 0.138  0.5779  0.114

1 个答案:

答案 0 :(得分:2)

$ cat tst.awk
BEGIN { OFS="\t"; OFMT="%.3f" }
NR==1 {
    print $0, "max", "avg.of.rest"
    next
}
{
    max = $2
    for (i=3;i<=NF;i++) {
        max = ($i > max ? $i : max)
    }

    tot = cnt = 0
    for (i=2;i<=NF;i++) {
        if ($i != max) {
            tot += $i
            cnt++
        }
    }

    print $0, max, (cnt?tot/cnt:0)
}

$ awk -f tst.awk file
        t1      t2      t3      t4      tn      max     avg.of.rest
l1      0       0.1448  0.2295  0.2896  0.3362  0.3362  0.166
l3      0.1395  0.1395  0.1395  0.1395  0.4421  0.4421  0.140
l4      0.5779  0.138   0.09591 0.05014 0.138   0.5779  0.106