Como remover linhas duplicadas em um grande arquivo de texto multi-GB?

14

A minha pergunta é semelhante a esta questão mas com algumas restrições diferentes:

  • Eu tenho uma grande lista de palavras delimitadas por \n - uma palavra por linha. Tamanho de Os arquivos variam de 2 GB a 10 GB.
  • Eu preciso remover todas as linhas duplicadas.
  • O processo pode classificar a lista durante a remoção das duplicatas, mas não é obrigatório.
  • Há espaço suficiente na partição para manter a nova lista de palavras exclusiva exibida.

Eu tentei ambos os métodos, mas ambos falham com erros de falta de memória.

sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)

Que outras abordagens posso experimentar?

    
por greatwolf 29.08.2011 / 04:40

1 resposta

16

Tente usar a classificação com a opção -o / --output=FILE em vez de redirecionar a saída. Você também pode tentar definir o buffer-size com o -S / --buffer-size=SIZE . Além disso, tente -s / --stable . E leia a man page, ela oferece todas as informações que eu dei.

O comando completo que você pode usar pode funcionar para o que você está fazendo:

sort -us -o wordlist_unique.lst wordlist.lst

Você também pode querer ler o seguinte URL:

link

Isso explica mais detalhadamente a classificação do que a página do manual.

    
por 29.08.2011 / 05:12