Existe um formato condensado lado-a-lado?

38

Eu tenho dois arquivos de log com milhares de linhas. Após o pré-processamento, apenas algumas linhas diferem. Essas linhas restantes são diferenças reais ou grupos de linhas embaralhadas.

Os diffs unificados me permitem ver as diferenças detalhadas, mas faz uma comparação manual com os olhos. Diferenças lado-a-lado parecem mais úteis para comparação, mas também adicionam milhares de linhas inalteradas. Existe uma maneira de obter a vantagem dos dois mundos?

Note que esses arquivos de log são gerados pelo xscope , que é um programa que monitora os dados do protocolo Xorg. Estou à procura de ferramentas de uso geral que possam ser aplicadas a situações semelhantes às descritas acima, e não ferramentas de análise de registro de acesso ao servidor da Web, por exemplo.

Dois arquivos de log de exemplo estão disponíveis no link ( log13 e log14 ). Um comando pré-processador pode ser encontrado no arquivo xscope-filter , que remove os timestamps e outros detalhes menores.

    
por Lekensteyn 12.06.2013 / 12:40

3 respostas

33

As duas ferramentas de diff que eu mais uso seriam meld e sdiff .

meld

O Meld é uma GUI, mas faz um ótimo trabalho ao mostrar os diffs entre os arquivos. Ele é mais voltado para o desenvolvimento de software com recursos como a capacidade de mover alterações de um lado para o outro para mesclar alterações, mas pode ser usado apenas como uma ferramenta de comparação direta de lado a lado.

sdiff

Eu usei essa ferramenta por anos. Eu geralmente o executo com as seguintes opções:

$ sdiff -bBWs file1 file2
  • -b Ignora as alterações na quantidade de espaço em branco.
  • -W Ignora todo o espaço em branco.
  • -B Ignora alterações cujas linhas estão todas em branco.
  • -s Não imprime linhas comuns.

Muitas vezes, com arquivos de log, você precisa aumentar a largura das colunas, você pode usar -w <num> para tornar a tela mais ampla.

outras ferramentas que eu uso de vez em quando

diffc

O Diffc é um script python que colore a saída do diff unificado.

$ diffc [OPTION] FILE1 FILE2

vimdiff

Vimdiff é provavelmente tão bom se não melhor que meld e pode ser executado a partir de um terminal. Eu sempre esqueço de usá-lo, o que, para mim, é um bom indicador de que acho a ferramenta um pouco difícil de usar no dia-a-dia. Mas YMMV.

    
por 12.06.2013 / 16:27
18

Atualmente estou usando diff lado-a-lado com o grep filtrando as diferentes linhas:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • A opção -W250 aumenta a saída de forma que eu possa ver mais dados.
  • expand é necessário para converter as guias em espaços
  • -C3 adiciona 3 linhas de contexto à saída do grep.
  • ^.{123} corresponde a metade dos dados antes dos marcadores de diferenças lado-a-lado.
  • colordiff torna a saída mais bonita a seguir
  • less -rS permite que as cores ANSI sejam interpretadas ( -r ) e evita linhas agrupadas ( -S ).

Isso é um truque, alternativas são bem vindas.

    
por 12.06.2013 / 12:55
11

Ninguém mencionou icdiff ainda? É ótimo! Pic fala por si:

    
por 24.05.2017 / 12:07

Tags