在 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