Por que o uniq está ignorando Unicode e linhas com uma única letra?

5

Estou tentando combinar os dicionários americano e britânico em um grande dicionário, e estou tentando remover todas as duplicatas do superconjunto, mas parece que o uniq não está emitindo palavras como "épée" ou single letras.

Isso é o que eu tentei usar:

LC_COLLATE=en_US.UTF-8 cat american-english british-english |sort|uniq -u > unique_sorted_combined_dict

Se eu fizer isso:

LC_COLLATE=en_US.UTF-8 cat american-english british-english |sort > sorted_combined_dict

"épée" e outras palavras assim aparecem, junto com letras únicas.

Há algo que estou perdendo aqui com uniq ?

Devo notar que estou usando o uniq do GNU coreutils no Ubuntu 12.10, se isso faz alguma diferença.

    
por supercheetah 04.02.2013 / 21:26

1 resposta

3

Você está definindo LC_COLLATE apenas para o comando cat (que não faz uso dele), enquanto precisa defini-lo para sort e uniq .

Além disso, você pode precisar definir LC_CTYPE para algo utf-8, caso contrário, isso causará confusão. Eu definiria LC_ALL como en_US.UTF-8

uniq -u reporta apenas linhas exclusivas . Então, se todas as palavras de uma só letra aparecerem várias vezes, é normal que elas não apareçam.

No meu sistema, épée aparece duas vezes:

$ cat american-english british-english | sort | grep -x 'épée'
épée
épée

Talvez você quisesse dizer sort | uniq ou sort -u .

    
por 04.02.2013 / 22:11