如何使用awk返回每行的最大索引

时间:2017-05-03 17:34:43

标签: awk

我有一个包含许多行的文件:

id  val1  val2  val3 val4
a  0.10  0.50  0.30  0.40
b  0.15  0.35  0.20  0.80
c  0.50  0.45  0.20  0.40
....

我想输出最大值的索引以及每行的最大值,如下所示:

a val2 0.50
b val4 0.80
c val1 0.50
...

我用过

awk '{m=$2;for(i=1;i<=NF;i++)if($i>m) m=$i;print $1,m}'

输出最大值,但不知道如何在打印命令中输出其索引(val#here),感谢提前任何建议和想法!

2 个答案:

答案 0 :(得分:1)

几乎在正确的轨道上,只需维护一个新的变量idx来存储索引

awk 'NR>1{m=$2;for(i=2;i<=NF;i++)if($i>=m) { m=$i; idx=i }; print $1,"val"(idx-1),m}' file

将根据需要生成输出。还有一些值得注意的要点1)跳过标题行,因为处理时不需要NR>1来处理它,2)从$2开始循环并将条件更改为{{1}因为它也可以匹配第二列。

答案 1 :(得分:1)

awk的另一个:

awk 'NR==1{split($0,a);next}{m=0;for(i=2;i<=NF;i++)if($i>m){m=$i;n=i}print $1,a[n],m}' foo
a val2 0.50
b val4 0.80
c val1 0.50