GNUソートを使用した単一キーによるソート/他のキーの不要なソートの防止

GNUソートを使用した単一キーによるソート/他のキーの不要なソートの防止

ソートされたデータを含むファイルがあり、別のキーのデータ順序を破壊することなく、1つのキーの値に基づいてファイルを並べ替えたいと思います。

GNUソートが私が指定しなかったキー値に基づいて行ソートを実行するのを防ぐにはどうすればよいですか?または、ソート時にGNUソートがキー範囲を無視するように指定するにはどうすればよいですか?

ファイルデータ.txt:

1 Don't
2 C 
1 Sort
2 B
1 Me
2 A

予想出力:

1 Don't
1 Sort
1 Me
2 C
2 B
2 A

注文する:

sort -k 1,1 <data.txt

結果:私が要求した不要なソートはありません。

1 Don't
1 Me
1 Sort
2 A
2 B
2 C

答え1

あなたが必要です安定したソート。からman sort

-s, --stable
       stabilize sort by disabling last-resort comparison

今すぐ:

$ sort -sk 1,1 <data.txt
1 Don't
1 Sort
1 Me
2 C 
2 B
2 A

キーが数値の場合、-nまたはが必要になる場合--numeric-sortがあります(たとえば、デフォルトの語彙ソート順序を使用して10と2を比較すると、予期しない結果が発生する可能性があります)。この場合は、次のようにします。

sort -sn <data.txt

行全体の数値解析は最初のフィールドの数値解析と同じであるため、最初のフィールドを抽出する必要はありません。

答え2

optionsが不足している(GNUではない)sort実装では、-sいつでも次のことができます。

<data.txt awk '{print NR "\t" $0}' | sort -n -k 2,2 -k 1,1 | cut -f 2-

つまり、行番号の前に2番目のソートキーを作成してから削除します。

関連情報