「sort」は奇妙な順序で出力を生成します。

「sort」は奇妙な順序で出力を生成します。

ソートのために、次の入力を考慮してください。

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

今実行してみてくださいsort foo

私のLinuxシステム(GNU coreutilsバージョン6.9-8.26)でこれを試しても、出力はソートされません。私はこれを得ます:

$ sort foo
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2

明らかに、すべての行はD,一緒になければならず、-文字の前に来なければなりません。

Cygwin(GNU coreutils 8.5)で実行すると、出力がソートされます。コメント?

ベストアンサー1

ソートはロケールによって異なります。特にロケールに依存し(再定義できます)、$LC_COLLATE存在しない場合に$LC_ALL置き換えられます。$LANGこのコマンドは、locale効果的に使用されている値を表示します。バラよりman 3 strcollman 3 setlocale、等。

LC_COLLATE=C(またはPOSIXロケールがまったくありません)厳密なバイト単位の比較が発生します。

LC_COLLATE=en_US.utf8結果は、句読点を無視し、同じ等価クラスの文字を等しく処理するアルファベット順の等価ソートです。

おすすめ記事