如何打印最大,其余的平均每一行 [英] How to print maximum and average of the rest for every row
本文介绍了如何打印最大,其余的平均每一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以打印这样就可以使用AWK?
输入
T1 T2 T3 T4 TN
L1 0 0.1448 0.2295 0.2896 0.3362
13 0.1395 0.1395 0.1395 0.1395 0.4421
14 0.5779 0.138 0.09591 0.05014 0.138
输出
T1 T2 T3 T4 TN最大avg.of.rest
L1 0 0.1448 0.2295 0.2896 0.3362 0.3362 0.166
13 0.1395 0.1395 0.1395 0.1395 0.4421 0.4421 0.140
14 0.5779 0.138 0.09591 0.05014 0.138 0.114 0.5779
解决方案
$猫tst.awk
BEGIN {OFS =\\ t的; OFMT =%3F}
NR == 1 {
打印$ 0最大,avg.of.rest
下一个
}
{
最大= $ 16
对于(i = 3; I< = NF;我++){
最大=($ I>最大$ I:最大)
} TOT = CNT = 0
对于(i = 2; I< = NF;我++){
如果($ I!=最大值){
TOT + = $ I
CNT ++
}
} 打印$ 0,最大值(CNT TOT / CNT:0)
}$ AWK -f tst.awk文件
T1 T2 T3 T4 TN最大avg.of.rest
L1 0 0.1448 0.2295 0.2896 0.3362 0.3362 0.166
13 0.1395 0.1395 0.1395 0.1395 0.4421 0.4421 0.140
14 0.5779 0.138 0.09591 0.05014 0.138 0.106 0.5779
Is it possible to print like this may be using awk ?
input
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
output
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
这篇关于如何打印最大,其余的平均每一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文