Classificar -u comando de função não está funcionando

1

Como você pode ver na figura em anexo captura de tela

Depois de usar o comando sort para classificar um arquivo de lista de palavras muito grande, eu os divido usando o comando Dividir. De lá, confirmei que as palavras listadas estão em ordem z.

Em seguida, executei o comando sort -u e observei que não estava removendo palavras exclusivas. (Foi removendo alguns como eu pude ver os arquivos eram um pouco menores, mas não todos.)

O que estou fazendo de errado?

Meta geral: meu objetivo é pegar todas as minhas listas de palavras e colocá-las em um arquivo grande (25gig), depois separar e remover palavras únicas (cortando isso em 40%) e depois dividir os arquivos em tamanhos gerenciáveis. Nenhum programa do Windows ou comando do Linux funcionou.

    
por Alex 20.09.2012 / 22:42

1 resposta

4

sort -u remove as linhas exclusivas. Então, o problema potencial é que essas três linhas não são iguais e sort -u deixará todas elas:

foo
foo 
foo 

Não importa o quão perto você esteja, é difícil perceber por quê. Ou seja, a menos que você faça um dump hexadecimal, com xxd , por exemplo:

0000000: 666f 6f0a 666f 6f20 0a66 6f6f e280 820a  foo.foo .foo....

0x0a é nova linha, se você não estiver familiarizado com os dumps hexadecimais. Então os três "foo" s são:

666f 6f         0a
666f 6f20       0a
666f 6fe2 8082  0a

Aha! Isso é na verdade foo , foo<SPACE> (o 0x20 ) e foo<EN-SPACE> (o 0xe28082 , que é U + 2002 codificado em UTF-8).

Você provavelmente tem algo parecido acontecendo. Você precisa usar um editor hexadecimal ou um editor de texto configurado para mostrar caracteres invisíveis. Por exemplo, aqui está o que parece em gvim com :set list . Acabei de digitar o comando ga para ver qual é o caractere sob o cursor, revelando que é U + 2002. Você também pode ver como o final da linha ( $ ) não está onde você espera nos dois espaços após eles:

    
por 20.09.2012 / 23:04