期待どおりに機能しない列ベースの並べ替え

期待どおりに機能しない列ベースの並べ替え

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-

おすすめ記事