Diffing dois grandes arquivos de texto

22

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

    
por jonasl 16.09.2010 / 12:50

2 respostas

38

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

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

Você menciona arquivos não classificados, então talvez seja necessário primeiro classificar os arquivos

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 diff

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

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

Não ficou claro pela sua pergunta se você já tentou isso antes. Se sim, então seria útil saber o que deu errado (demorou demais, etc.). Eu sempre achei que os comandos stock sort e diff tendem a fazer, no mínimo, comandos customizados, a menos que Existem algumas propriedades muito específicas do domínio dos arquivos que tornam possível faça as coisas de maneira diferente.

    
por 16.09.2010 / 13:35
3

Classificar as entradas e informar ao programa diff que suas entradas estão classificadas fornecerá uma grande aceleração. Eu não sei de nenhum diff com uma opção como essa, mas comm assume entrada classificada e será muito mais rápida se for suficiente para seus propósitos.

    
por 07.02.2013 / 01:27