2017-05-03 89 views
1

我有這樣的許多行的文件,以返回每行的最大的指數:如何用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#她e)在打印命令中,謝謝你提出任何建議和想法!

回答

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開始循環,並將條件更改爲($i>=m),因爲它也可以匹配第2列。

+1

這是快! –

+1

@JamesBrown:一次! ;) – Inian

+1

太棒了!謝謝! – lynn

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