我有一个包含许多行的文件:
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),感谢提前任何建议和想法!
答案 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