Como combinar 2 arquivos grandes e imprimir a diferença no script de shell

1

Eu tenho 2 arquivos.

O arquivo1 tem registros numéricos de 400k. por exemplo:

1
2
3
4
5
6
..
e assim por diante

O Arquivo 2 também possui registros numéricos de 420k. por exemplo:

1
2
3
4
6 
..
e assim por diante

Ambos os arquivos estão de maneira não classificada. Eu quero combinar os 2 arquivos e imprimir a diferença.

Quando eu tento usar diff , comm ou grep , isso leva muito tempo (mais de uma hora). Isso não é viável para mim.

Como posso fazer isso mais rápido (combinando e imprimindo a diferença).

Eu uso o HP -UX.

    
por user32066 09.02.2013 / 07:43

1 resposta

1

Em um arquivo de 10 milhões de linhas, gerado com:

seq 10000000 |
  tee a |
  awk 'rand() < 0.05 {print int(1000000 * rand())}; 1' > b

todos:

diff a b | wc -l

comm -3 <(sort a) <(sort b) | wc -l

(sintaxe do ksh / bash / zsh)

cmp -l a b | wc -l

Demorou menos de 30 segundos em um PC de baixo nível de 3 anos (rodando Linux).

Poderia haver grandes variações com diff dependendo do conteúdo, pois o algoritmo diff que precisa detectar inserções, exclusões ou alterações será afetado pela forma como os dados são exibidos, mas não haveria tanta variação com os outros.

O que exatamente você tentou?

    
por 09.02.2013 / 12:15