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