cat marks.txt
返品
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
awk -F" " '{ print $4"\t" $0 }' marks.txt | sort | cut -f 2-
4番目の列に基づいてテキストを正常にソートしました。
コンテキスト:https://stackoverflow.com/questions/17048188/how-to-use-awk-sort-by-column-3
ただし、最も投票された回答を模倣するには、 sort -t" " -nk4 marks.txt
次のように返します。
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
注文句が機能しないのはなぜですか?
ベストアンサー1
(ここでは、フィールド区切り文字としてスペース文字)を使用すると、連続するすべてのスペースを単一の区切りsort -t' '
文字として扱うのではなく、各スペースをフィールド区切り文字として扱うため、期待される結果は得られません。そのため、最後のスペースを区別するために最初のカンマソリューションが提供されました。フィールドを専用のタブ区切り文字として指定し、そのフィールドに基づいてソートしてから出力から削除します。
awk commnadでここを使用すると、-F" "
コマンドの出力や処理に副作用がなく、削除できます。また、awkで使用すると、連続する-F" "
スペースを単一の区切り文字として扱いますが、ソートではすべての単一のスペースを別々の区切り-t" "
文字として扱います(awkでそれに対応するのは、フィールド区切り-F"[ ]"
文字を正規表現として定義することです)。
結局、次のようにすることをお勧めします。
awk '{ print $NF"\t"$0 }' marks.txt |sort |cut -f2-