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

データが説明されているように正確にフォーマットされ(特に3番目の列、数字がすべて左揃え)、データがファイルを介して提供されると仮定すると、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

関連情報