Shell-Script

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

  • November 27, 2019

在 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?

我會用awk. 假設數據的格式與您的範例數據完全一致,以下將產生所需的輸出:

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

假設您的數據完全按照您的說明進行格式化(尤其是對於第 3 列,數字全部左對齊)並且這些數據是通過cating 文件提供的,您可以嘗試以下命令:

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

如果您的數據是由其他命令或源提供的,請更改cat為該其他命令。有關更多資訊,請參閱我基本上只是根據您的需求量身定制的這篇文章。

編輯:

我稍微更改了上面的命令,因為不需要告訴sort從第 3 列字元 1 開始,因為 sort 總是將空白視為分隔符。sort正如使用者指出的那樣,當然也可以直接將輸入文件提供給。如果標題也是數據的一部分,請將上述命令更改為:

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

引用自:https://unix.stackexchange.com/questions/554473