web-dev-qa-db-ja.com

「sort」、「sort k 1」、「sort k 1,1」の出力が等しいのはなぜですか?

私はファイルを持っています:

_$ cat file
1 c
8 a
1 b
5 f
_

最初のsortコマンドはすべての行の最初のフィールドを比較し、それらを並べ替えてから、これらの行の最初のフィールドが同じで、次のように2番目のフィールドの並べ替えを再開すると思います。

_$sort file
1 b
1 c
5 f
8 a
_

オプション_k 1_と_k 1,1_の違いについて読みました:_k 1_を使用すると、ソートキーは行末まで続く可能性がありますが、_k 1,1_のみでソートする必要があります他のフィールドを考慮せずに最初のフィールドが:

_$sort -k 1 file
1 b
1 c
5 f
8 a

$sort -k 1,1 file
1 b
1 c
5 f
8 a
_

sort = _sort k 1_ = _sort k 1,1_の出力が等しいのはなぜですか?

_sort k 1,1 file_の出力は

_1 c 
1 b
5 f
8 a
_

それが正しくない場合、私の間違いとは何か、どうすればそのような出力を得ることができますか?

2
Sinoosh

info sortから

   Many options affect how ‘sort’ compares lines; if the results are
unexpected, try the ‘--debug’ option to see what happened.  A pair of
lines is compared as follows: ‘sort’ compares each pair of fields, in
the order specified on the command line, according to the associated
ordering options, until a difference is found or no fields are left.  If
no key fields are specified, ‘sort’ uses a default key of the entire
line.  Finally, as a last resort when all keys compare equal, ‘sort’
compares entire lines as if no ordering options other than ‘--reverse’
(‘-r’) were specified.  The ‘--stable’ (‘-s’) option disables this
“last-resort comparison” so that lines in which all fields compare equal
are left in their original relative order.  The ‘--unique’ (‘-u’) option
also disables the last-resort comparison.

希望する結果を得るには(最初のフィールドが数値であることを念頭に置いてください)

$ sort -s -k1,1n file
1 c
1 b
5 f
8 a
7
steeldriver

2番目の列を逆にしたい場合(特定の質問に対する適切な答えではありませんが、おそらくあなたが興味を持っていることです)、 nix StackExchange oneから少し詳しく説明します:

sort -k1,1n -k2,2r file
3
dadexix86