Diferença lado a lado de arquivos grandes

1

Eu tenho dois ~ 1 GB de arquivos que eu quero fazer um lado a lado diff de. Soluções que tentei:

  • diff - Funciona rapidamente, mas não sai lado-a-lado.
  • diff -y ou sdiff - Isso gera resultados lado a lado, mas gera o arquivo inteiro - não apenas as mudanças, então é impossível encontrá-las.
  • icdiff - muito lento (está escrito em Python, então não é nenhuma surpresa).
  • ydiff - Na verdade, não foi tentado, mas também está escrito em Python, então eu suponho que também será muito lento.
  • KDiff3 - Crashed.
  • Xcode FileMerge - Muito lento (deu alguns minutos de falta de resposta).
  • Além da comparação - Limite máximo de 500 MB.
  • Meld - progrediu um pouco, mas demorou muito para ser útil.
  • vimdiff - Carrega os arquivos com êxito e, na verdade, exibe uma comparação lado a lado, mas o esquema de cores torna ilegível, e coisas normais que você esperaria de um programa são não funcionam, por exemplo, pressionando para cima para rolar para cima.
por Timmmm 27.07.2018 / 14:50

2 respostas

1

O melhor que eu tenho até agora é:

diff -y --suppress-common-lines --speed-large-files file1 file2

No entanto, infelizmente que não t mostrar-lhe todas as linhas de contexto .

Eu encontrei outra solução usando grep que parecia ok, mas usa regex e é muito lento .

    
por 27.07.2018 / 15:45
0

Se você quiser contexto, você pode canalizar a saída (não suprimida) de sdiff (ou diff -y) através do egrep com o contexto antes (-B) e depois (-A):

sdiff -H -t file1 file2 | egrep -B1 -A1 '^.{64}[^ ]' 

O -t e o. {64} estão lá para chegar ao ponto médio da largura padrão de 130 caracteres (abas de expansão na saída para que não atrapalhem a contagem). Você pode especificar uma largura menor, mas você teria que ajustar esse deslocamento de acordo:

sdiff -H -w 80 -t file1 file2 | egrep -B1 -A1 '^.{39}[^ ]' 
    
por 27.07.2018 / 18:19

Tags