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