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

如何使用awk返回每行的max索引,awk,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 ... 我想输出最大值的索引,以及每行的最大值,如下所示: id val1 val2 val3 val4 a 0.10 0.50 0.30 0.40 b

我有一个包含许多行的文件,如下所示:

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
...
我想输出最大值的索引,以及每行的最大值,如下所示:

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}'
awk'{m=$2;for(i=1;im)m=$i;print$1,m}'
要输出最大值,但也不确定如何在print命令中输出其索引(val#here),感谢advance提供的任何建议和想法

您的思路基本正确,只需维护一个新变量
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
awk'NR>1{m=$2;对于(i=2;i=m){m=$i;idx=i};打印$1,“val”(idx-1),m}文件
将根据需要生成输出。这里还有几点值得注意:1)跳过标题行,因为处理
NR>1不需要它;2)从
$2
开始循环,并将条件更改为
($i>=m)
,因为它也可以匹配第二列。

另一个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
awk'NR==1{split($0,a);next}{m=0;for(i=2;im){m=$i;n=i}打印$1,a[n],m}'foo
0.50瓦尔
b值4 0.80
c值10.50

太快了@詹姆斯布朗:这一次!;)