ti-enxame.com

Diferenciando dois grandes arquivos de texto

Eu tenho dois arquivos grandes (6 GB cada). Eles não são classificados, com avanço de linha (\n) como separadores. Como posso diferenciá-los? Deve demorar menos de 24h.

34
jonasl

A resposta mais óbvia é apenas usar o comando diff e provavelmente é uma boa ideia adicionar o parâmetro --speed-large-files a ele.

diff --speed-large-files a.file b.file

Você menciona arquivos não classificados, talvez seja necessário classificá-los primeiro

sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted

você pode salvar a criação de um arquivo de saída extra canalizando a saída de 2ª ordem diretamente para o diff

sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -

Obviamente, eles funcionarão melhor em um sistema com bastante memória disponível e você provavelmente também precisará de muito espaço livre em disco.

Não ficou claro em sua pergunta se você já tentou isso antes. Nesse caso, seria útil saber o que deu errado (demorou muito, etc.). Sempre achei que os comandos de classificação e difusão de ações tendem a executar pelo menos tão bem quanto os comandos personalizados, a menos que haja algumas propriedades específicas dos domínios dos arquivos que possibilitem fazer as coisas de maneira diferente.

47
Richm

Classificar as entradas e informar ao programa diff suas entradas são classificadas forneceria uma grande velocidade. Eu não conheço nenhum diff com uma opção como essa, mas comm assume entrada classificada e será muito mais rápido se for suficiente para seus propósitos.

5
Karl