ソートが同一のソートキーを持つ行の順序を変更するのはなぜですか?


31

データは次のとおりです。

D 2
B 2
A 2

このコマンドを実行すると:

sort -k2,2 file

以下を出力します:

A 2
B 2
D 2

私の質問は、2番目の列のみを指定-k2,2すると、最初の列でもソートされるのはなぜですか?2番目の列の値はすべて同じであるため、そのままにしておく必要があります。


7
[Semi-OT]:FYI、ソートキーが一致したときに入力順序を保持するソートは、安定したソートとしてコンピューターサイエンスで知られています。多くの場合、不安定なソートアルゴリズムはより高速または単純であるため、ソートは安定していません。ここではそうではありませんが、CSの用語を知っていると、-sオプションのマンページドキュメントがわかりやすく、見つけやすくなります。
デロバート

回答:


34

これが最後の手段の比較です。2行を比較するときに、すべてのキーが等しい場合、最後の手段として、行全体の基本的な文字列比較が実行されます(-r他のオプションは適用されません)。その動作はPOSIXで指定されています:

-uオプションが指定されている場合を除き、それ以外の場合は等しいと比較される行は、オプション-d、-f、-i、-n、または-kが存在しないかのように順序付けられます(ただし、-rが有効な場合、指定された)および行のすべてのバイトが比較に重要である。まだ等しいと比較される行が書き込まれる順序は指定されていません。

GNU sortでは、その最後のリゾート比較は-s安定版)オプションで無効にできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.