2013-04-04 9 views
6

フランス語のロケールで文字を使ってsortコマンドの動作を説明できますか?フランス語ロケールでsortコマンドが "œ"と "oe"を区別しないのはなぜですか?

$ file file.txt 
file.txt: UTF-8 Unicode text, with CRLF line terminators 

$ wc -l file.txt 
4 file.txt 

$ cat file.txt 
cœz 
coez 
coe 
cœ 

$ sort file.txt 
coe 
cœ 
cœz 
coez 

$ sort -d file.txt 
cœ 
coe 
coez 
cœz 

$ env | grep -P "(LC|FR)" 
LANG=fr_FR.UTF-8 

文字は単に辞書のソート(sort -d)の場合には無視されるのに対し、「œ」が、通常のソートの場合はランダムなようだ「OE」よりも小さいか大きいという事実。

照合とは関係がありますが、ここでいくつかの洞察をしたいと思います。

+1

フランス語のロケールを使用していますか? '$ LC_ALL'の値は何ですか? – unwind

+0

私は窓の下でcygwinを使用しています。 LC_ALLは空です。フランスのロケールであるという事実は私の推測です。どうすれば確認できますか? –

+0

" - "が "oe"と完全に等しい場合、結果はソートの不安定性によって説明することができます。 '-s'オプションが与えられたときに得られる結果を見てください。 –

答えて

1

英和辞書のa-zA-Zの範囲にないため、辞書の並べ替えは無視されます。 (これは推測です)。

フランス語のロケールでは、 - とoeは等しいと見なされるため、どのような順序でも出現するはずです。これはあなたに起こっているようです。それが正しいなら、あなたはでこれを置く場合:

coe 
cœ 
cœm 
coem 
coep 
cœp 
cœz 
coez 

あなたは-c(ファイルがソートされているかどうかを確認)、または-rにオプション(順序を逆にする)を使用することができます:

cœz 
coez 
cœm 
coem 
coep 
cœp 
coe 
cœ 

あなたはこの取得する必要があります多くを得る。

+0

私は辞書の並べ替えに同意します。しかし、私はなぜœとoeが等しいと見なされるのか、私はこの行動が選ばれた理由を不思議に思います。誰もそれを知っていますか? –

+1

@btouegでは、ソート関数の動作は、既存の規約に合致するものであり、実装者によって選択されていません。本質的に、 'œ'と' oe'は同じことを書くための2つの異なる方法です - それは言語差よりもタイポグラフィの違いです。 – Ben

+0

実際、結束文字は辞書では無関係に並べ替えられています。 http://fr.wikipedia.org/wiki/Classement_alphab%C3%A9tique#Ligatures_et_majuscules ただし、アクセント記号の付いた文字が並べ替えられていることがわかります: http:// en.wikipedia.org/wiki/Alphabetical_order#Language-specific_conventions おもしろいことは、辞書にはない重複があると、そのコンピュータの順序が完全にランダムになるということです。これは、スペルなど、活用できる情報であるため、必要と思われる動作ではありません。 –

関連する問題