Minha pergunta é semelhante a essa pergunta, mas com algumas restrições diferentes:
- Eu tenho uma grande lista de
\n
palavras delimitada - uma palavra por linha. O tamanho dos arquivos varia de 2 GB a 10 GB. - Preciso remover todas as linhas duplicadas.
- O processo pode classificar a lista durante o processo de remoção das duplicatas, mas não é obrigatório.
- Há espaço suficiente na partição para reter a nova lista de palavras exclusiva.
Eu tentei esses dois 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 tentar?
linux
text-processing
uniq
bisavô
fonte
fonte
Respostas:
Tente usar a classificação com a opção
-o
/ em--output=FILE
vez de redirecionar a saída. Você também pode tentar definir obuffer-size
com o-S
/--buffer-size=SIZE
. Além disso, tente-s
/--stable
. E leia a página de manual, ela oferece todas as informações que eu dei.O comando completo que você pode usar que pode funcionar para o que você está fazendo:
Você também pode querer ler o seguinte URL:
http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html
Isso explica mais detalhadamente o que a página de manual.
fonte
sort: write failed: /root/tmp/sortVxscLn: No space left on device
. O problema é um pouco irritante, pois não falha imediatamente. Parece que você precisa aguardar que a memória se esgote antes de ocorrer um erro.sort
para usar um sistema de arquivos com mais espaço livre.