ソートが同じソートキーを使用して行の順序を変更するのはなぜですか?

ソートが同じソートキーを使用して行の順序を変更するのはなぜですか?

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

D 2
B 2
A 2

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

sort -k2,2 file

次のように出力されます。

A 2
B 2
D 2

私の質問は、2番目の列のみを指定したときに-k2,2最初の列に基づいてソートするのはなぜですか? 2番目の列の値はすべて同じであるため、そのままにしてください。

ベストアンサー1

これは最後の手段の比較。 2つの行を比較するときにすべてのキーが同じであると比較すると、最後の手段として行全体に対してデフォルトの文字列比較が行われます(-rまだ適用されますが、他のオプションは適用されません)。この動作は、次のために発生します。POSIX:

-uオプションが指定されていない限り、等価を比較する行は、-d、-f、-i、-n、または-kオプションのない順序でソートする必要があります(ただし、オプションがある場合、-rはまだ有効です。 )。指定)とすべてのバイトの行は比較に重要です。行が等しいか比較される順序は、未指定の順序で記録されます。

GNUの場合は、sort/-sオプションを使用して--stable最後の比較を無効にできます。


¹GNUで使用されるソートアルゴリズムがsort異なるため安定したがって、最後の比較を無効にすると、安定したソートが行われます。

おすすめ記事