GNU照合順序とLC_COLLATE = "en_US.UTF-8"を試しています。 「test」というファイルがあります。
1,0 1
10 2
1,0 3
10 4
Withsort -k1,2
と simple の順序sort test
は変更されません。
$ sort -k1,2 test
1,0 1
10 2
1,0 3
10 4
したがって、ソートはおそらくLC_COLLATEのいくつかの問題のために「1,0」が「10」に等しいと思います(句読点をスキップしますか?)。
ここで:を使用すると、sort -k1,1 -k2,2
別の順序が提供されます。
$ sort -k1,1 -k2,2 test
10 2
10 4
1,0 1
1,0 3
突然並べ替えられた場合、「10」は「1,0」と同じと見なされなくなりました。
どうしたの?この場合、なぜ同じではありませんかsort -k1,1 -k2,2
?sort -k1,2
彼らは本当に同等でなければなりませんか?それともマンページを間違って理解したのでしょうか? (coreutils 8.22および8.29バージョンを試しましたが、どちらもこの動作があります)
答え1
-k1,2
「1から2までのすべてのフィールドの内容を比較しながら、すべての行をソートする」という意味です。したがって、「1,0 1」は「10 2」と比較されます。
-k1,1 -k2,2
これは、「すべての行をソートし、フィールド 1 の内容を比較し、フィールド 1 の内容が 2 つの行で同じ場合にフィールド 2 の内容を比較する」という意味です。これにより、「1,0」が「10」と比較されます。 「2」は「4」と比較されます。
どちらの場合も、次に何が起こるのかは、校正、特に重み付けに帰結します。数字は通常、句読点やスペースよりも大きな割合を占めています。 「1,0 1」と「10 2」を比較すると数値が異なるため、カンマによる違いは無視されます。 「1,0」と「10」を比較すると、唯一の違いはカンマであるため、これ以上無視されません。バラよりISO 14651もっと学ぶ。
LC_COLLATE=C
重みなしで文字値のみに基づいてソートするように設定できます。あなたのケースはすべて次のようになります。
1,0 1
1,0 3
10 2
10 4
「C」ロケールを使用する場合。