Unicode値に基づいて行を並べ替える

Unicode値に基づいて行を並べ替える

Unicode値に基づいてテキストファイルをソートしようとしています。私が知る限り、これは最初の数字、次の文字、次に中国語、日本語、韓国語の表の文字を意味します。ただし、sort(with LC_ALL=C)はこの操作に悲惨に失敗します。私のリストから抜粋したものは次のとおりです。

[#ゆうかりんちゃんねる]
[チ→ム♂ツナギ]
[ぞめ]
...
[サディスティックブラウニー]
[ほねとかわとがはなれるおと]
[10th Avenue Cafe]
[2nd Flush]
...
[Alstroemeria Records & Cradle]
[ALTERNATIVE]
[アルトノイラント - Altneuland]
[Amateras Records]
[セブンスヘブンAmmy's]
[anagram]
[Analyze]
...
[Z.S.G TRAXXX]
[α music]
[Яiselied]
[一人華飯スペシャル]
[七瀬屋]

との間でのように読めsortない文字を(少なくとも時々は)無視するようです。誰かが使用を提案しましたが失敗しました(それぞれoptionsと使用)。AltneulandAlternativeAmateras Recordsmsort-u c-u d-u n

まず、なぜそんなに予期せずに行われますか?第二に、この問題をどのように解決できますか?

追加://私はRaspberry PiでRaspbianを使用しています。 (B)

答え1

どのシステムを使用しますか?

LC_ALL=C sort < your-file.txt

your-file.txtutf-8エンコーディングで公開されたテキストは、次のようにソートされています。

[#ゆうかりんちゃんねる]
[10th Avenue Cafe]
[2nd Flush]
[ALTERNATIVE]
[Alstroemeria Records & Cradle]
[Amateras Records]
[Analyze]
[Z.S.G TRAXXX]
[anagram]
[α music]
[Яiselied]
[ぞめ]
[ほねとかわとがはなれるおと]
[アルトノイラント - Altneuland]
[サディスティックブラウニー]
[セブンスヘブンAmmy's]
[チ→ム♂ツナギ]
[一人華飯スペシャル]
[七瀬屋]

私のシステムで(GNU coreutils 8.13、Debian EGLIBC 2.13-38で並べ替え)、パイプは次のようにcut -c2 | tr -d \\n | recode ..dumpなります。

UCS2   Mne   Description

0023   Nb    number sign
0031   1     digit one
0032   2     digit two
0041   A     latin capital letter a
0041   A     latin capital letter a
0041   A     latin capital letter a
0041   A     latin capital letter a
005A   Z     latin capital letter z
0061   a     latin small letter a
03B1   a*    greek small letter alpha
042F   JA    cyrillic capital letter ya
305E   zo    hiragana letter zo
307B   ho    hiragana letter ho
30A2   A6    katakana letter a
30B5   Sa    katakana letter sa
30BB   Se    katakana letter se
30C1   Ti    katakana letter ti
4E00
4E03

sortこれは、GNU coreutils 7.4およびEGLIBC 2.11.1-0ubuntu7.12を使用する既存のシステムでも同様です。

答え2

問題が解決しました。明らかに十分LC_ALL=Cではありません。export LC_ALL=C認められるためには文を書かなければなりませんでしたsort。これは私のせいですが、将来のUnicode分類器に注意する必要があります。

関連情報