ソート-k1,2はソート-k1,1 -k2,2と同じですか?

ソート-k1,2はソート-k1,1 -k2,2と同じですか?

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,2sort -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」ロケールを使用する場合。

おすすめ記事