下の入力ファイルの指定されたオプションに対してソートが何も実行されない場合、2行目と3行目が変更されるのはなぜですか?
$ cat test1
1 4
2 5
2 1
3 6
$ sort -n -k 1,1 test1
1 4
2 1
2 5
3 6
答え1
ソートキーの仕様に従って等しく比較するときに行全体を語彙的に比較する最後の比較方法です。
GNU実装を使用すると、最終比較を無効にするオプションをsort
追加できます。-s
GNUsort
ソートアルゴリズムは次のとおりです。安定、入力に元の順序が表示されるので、次のようになります。
sort -s -n -k1,1
それ以外の場合:
sort -sn
(比較は数字なので、行全体を数字に変換するか、最初のフィールドを数字に変換して比較するかは違いはありません。)
答え2
デバッグオプションで実行します。最初の下線はプライマリソート、次はセカンダリソートです。
sort -n -k1,1 --debug test1
sort: text ordering performed using simple byte comparison
1 4
_
___
2 1
_
___
2 5
_
____
3 6
_
___
2 番目の下線は最初のフィールドで始まります。
わかりやすくするために、次のように理解してください。
1 (1 4)
2 (2 1)
2 (2 5)
3 (3 6)