gnu coreutilsはソートが壊れていますか?


10

ソートする次の入力を検討してください。

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)で実行すると、出力がソートされます。コメント?

回答:


18

ソートはロケールに依存します。具体的には、$LC_COLLATE(おそらくによってオーバーライドされます$LC_ALL)依存し、$LANG存在しない場合はフォールバックします。このコマンドlocaleは、効果的に使用している値を示します。参照してくださいman 3 strcollman 3 setlocaleなど、

LC_COLLATE=C(またはPOSIXロケールがまったくない)と、厳密なバイト単位の比較が行われます。

LC_COLLATE=en_US.utf8 結果はアルファベット順の等価ソートとなり、句読点は無視され、同じ等価クラス内の文字は同等に扱われます。


確かに、export LC_COLLATE=Cソートは期待どおりに動作します
Leo Alekseyev 2010年

3
アクセントは完全に無視されません。Stephane並べ替えの前に Stéphane、しかし、Stephanie並べ替え後Stéphaneé等価であるe(のようなêë...)が、タイがあります場合は、それらの間の順序が明確に定義されています。古き良き紙の辞書でも同じです。
ステファンChazelas

あなたが本当にそれをすべて知りたいのであれば:unicode.org/reports/tr10
Martin Tournoij '24
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.