Ordenar linhas por valor unicode

6

Estou tentando classificar um arquivo de texto linewise pelos seus valores Unicode. Tanto quanto eu posso dizer, isso significa numerais primeiro, depois letras, depois CJK-Ideographs. No entanto, sort (com LC_ALL=C ) falha terrivelmente nessa tarefa. Aqui está um trecho da minha lista:

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

Parece que sort ignora (pelo menos algumas vezes) os caracteres que não pode ler, porque Altneuland estaria de fato entre Alternative e Amateras Records . Alguém sugeriu usar msort , mas também falhou (com as opções -u c , -u d e -u n , respectivamente).

Primeiro, por que está agindo de forma inesperada? Segundo, como posso consertar isso?

Adicionar: // Estou usando o Raspbian em um Raspberry Pi (B)

    
por David Stockinger 13.03.2013 / 22:42

2 respostas

3

Qual sistema você está usando?

LC_ALL=C sort < your-file.txt

Onde your-file.txt é o texto que você postou na codificação utf-8, classifica como:

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

No meu sistema (classifique de GNU coreutils 8.13, Debian EGLIBC 2.13-38). Que quando canalizado para cut -c2 | tr -d \n | recode ..dump dá:

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

O mesmo em um sistema antigo com sort do GNU coreutils 7.4, EGLIBC 2.11.1-0ubuntu7.12

    
por 13.03.2013 / 23:39
2

A questão foi resolvida. Aparentemente LC_ALL=C não é suficiente. Eu preciso escrever export LC_ALL=C para ser reconhecido por sort . Isso é ruim, mas deve ser notado para futuros classificadores de unicode

    
por 14.03.2013 / 13:15

Tags