次のスナップショットを含むファイルがあります。
Name age class
John 12 3
Mark 10 1
Philip 15 6
列間の区切り文字は複数の空白です。
クラスカテゴリーで最高の数字を印刷したいです。
希望の結果を得る方法を教えてください。
答え1
awk 'NR > 1 && (max == "" || $NF > max) { max = $NF } END { print max }' file
これにより、ファイルを読み取り、最初の行(ヘッダー行)を除くすべての行の最後のフィールドに以前に見た値より大きい数値があるたびに、その値が変数に記憶されますmax
。以前に記憶された値がない場合、この値も記憶されます。
最後に、max
変数の値が印刷されます。これは、すべての行(最初の行を除く)の最後のフィールドに表示される最大値です。
これはclass
、列が常に各行の終わりにあると仮定します。
特殊変数NF
とNR
は、それぞれ現在のレコードのフィールド数とこれまでに読み込んだレコードの数です。値は$NF
現在のレコードの最後のフィールド値です。
最後の列の最大数を含む行全体を取得するには、上記のコードを少し変更して関連データを記憶して印刷します。
awk 'NR > 1 && (max == "" || $NF > max) { max = $NF; line = $0 } END { print line }' file
答え2
sort
この機能は、主な位置を定義することによって達成されます。次のことを試すことができます。
sort --key=3 file