找到 Column3 的最大值並僅列印 Column1 和 2 的值

找到 Column3 的最大值並僅列印 Column1 和 2 的值

在 Unix 中,我試圖找到一個命令,該命令可以找到 Column3 中的最大值,並在新檔案中列印 Column2 和 Column1 中的相應值(但不是 Column3 中的值)。

 Column1     Column2     Column3
   A          1          25
   B          2          6
   C          3          2
   D          4          16
   E          5          10

Unix 指令應該是什麼?我應該使用 grep、awk 還是 datamash?

答案1

我會用awk.假設資料的格式與範例資料完全相同,以下將產生所需的輸出:

awk -v MAX=0 '{ if(NR>1 && $3>MAX){WANT1=$1; WANT2=$2; MAX=$3}} END{print WANT1, WANT2}' infile > outfile

答案2

假設您的資料格式完全按照您所述(尤其是第三列,數字全部左對齊)並且該資料是透過cat檔案提供的,您可以嘗試以下命令:

*input generating command* | sort -nrk3 | awk '{print $1 " " $2}' > output_file

如果您的資料是由其他命令或來源提供的,請變更cat為其他命令。欲了解更多信息,請參閱這個帖子我基本上只是根據您的需求量身定制的。

編輯:

我稍微更改了上面的命令,因為不需要告訴sort從第 3 列字元 1 開始,因為排序總是將空白視為分隔符號。sort正如一位用戶指出的那樣,當然也可以直接提供輸入檔。如果標頭也是資料的一部分,請將上述命令更改為:

*input generating command* | sort -nrk3 | awk '{if (NR>1) print $1 " " $2}' > output_file

答案3

awk '{if(NF>2 && $3>M){M=$3;print $1,$2} }' file1 | tail -1 > file2

相關內容