Awk 如何打印每行剩余部分的最大值和平均值

Awk 如何打印每行剩余部分的最大值和平均值,awk,Awk,使用awk可以这样打印吗 输入 输出 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.0501

使用awk可以这样打印吗

输入

输出

        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
$cat tst.awk
开始{OFS=“\t”;OFMT=“%.3f”}
NR==1{
打印$0,“最大值”,“剩余平均值”
下一个
}
{
最高=2美元
对于(i=3;i最大值?$i:max)
}
tot=cnt=0

对于(i=2;我认为你所说的“最小值的平均值”实际上是“其余数字的平均值”因为最小值的平均值是最小值,第一行中的最小值是零。如果是这样,请编辑您的问题以解决这个问题。另外,为每一行示例输入添加预期输出。没有一行没有另一行,没有任何意义。等等-如何计算“最小”值的平均值(
0.4467
)大于最大值(
0.3362
)编辑你的问题,以澄清和/或修复错误。现在有错误。SyryOK,现在改变一个输入行,使最大值出现两次,并显示该情况下的预期输出。您可能还需要添加一个行,其中所有的值都为零,这是人们通常不考虑并导致除以E的情况。当它发生时会出错。负数呢?平均值来自哪个数字???@Ed Morton。是的,你是对的。在此之前,我写了一个脚本,删除了所有有零的行。我没有任何数字,因为我对它们进行了log2变换。@JID.Mean来自每行的所有值,但最大值除外了解OP想要从你的答案中做的比他们的问题更多的事情哈!+1嗨,我正在传递你的脚本,用平均值除以max。但是我没有得到输出中的标题。任何建议都将不胜感激。我喜欢这个awk'NR>1{if($NF>0)print$0“\t”$(NF-1)/$NF;else print$0“\t”$(NF-1)}对不起,我不知道你在说什么。也许你应该发布一个新问题?
        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
$ 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