ソートする次の入力を検討してください。
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〜7.4)で試しても、出力はソートされません。cygwin(gnu coretuils 8.5)で実行すると、出力がソートされます。コメント?
ソートする次の入力を検討してください。
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〜7.4)で試しても、出力はソートされません。cygwin(gnu coretuils 8.5)で実行すると、出力がソートされます。コメント?
回答:
ソートはロケールに依存します。具体的には、$LC_COLLATE
(おそらくによってオーバーライドされます$LC_ALL
)依存し、$LANG
存在しない場合はフォールバックします。このコマンドlocale
は、効果的に使用している値を示します。参照してくださいman 3 strcoll
、man 3 setlocale
など、
LC_COLLATE=C
(またはPOSIX
ロケールがまったくない)と、厳密なバイト単位の比較が行われます。
LC_COLLATE=en_US.utf8
結果はアルファベット順の等価ソートとなり、句読点は無視され、同じ等価クラス内の文字は同等に扱われます。
Stephane
並べ替えの前に Stéphane
、しかし、Stephanie
並べ替え後Stéphane
。é
等価であるe
(のようなê
、ë
、ẽ
...)が、タイがあります場合は、それらの間の順序が明確に定義されています。古き良き紙の辞書でも同じです。
export LC_COLLATE=C
ソートは期待どおりに動作します