ソートする次の入力を検討してください。
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ソートは期待どおりに動作します