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.
As diferenças unificadas permitem-me ver as diferenças detalhadas, mas dificulta a comparação manual com os olhos. As 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?
Observe que esses arquivos de log são gerados pelo xscope
qual é um programa que monitora os dados do protocolo Xorg. Estou procurando ferramentas de uso geral que possam ser aplicadas a situações semelhantes às anteriores, por exemplo, ferramentas de análise de log de acesso a servidores web não especializadas.
Dois exemplos de arquivos de log estão disponíveis em http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13
e log14
). Um comando de pré-processador pode ser encontrado no xscope-filter
arquivo que remove os carimbos de data e hora e outros detalhes menores.
diff
tem--suppress-common-lines
opção? pastebin.com/KZrVCNFRvimdiff
(do pacote vim ) atenda melhor às suas necessidades: exibição paralela, colorida, linhas comuns dobradas. Os números de linha podem ser ativados com:set number
.Respostas:
As duas ferramentas diff que eu mais uso seriam meld e sdiff .
fundir
O Meld é uma GUI, mas faz um ótimo trabalho ao mostrar as diferenças 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 diferenciação direta lado a lado.
sdiff
Eu uso essa ferramenta há anos. Geralmente, eu o executo com as seguintes opções:
-b
Ignore as alterações na quantidade de espaço em branco.-W
Ignore todo o espaço em branco.-B
Ignore as alterações cujas linhas estão todas em branco.-s
Não produza linhas comuns.Geralmente, com os arquivos de log, é necessário aumentar a largura das colunas; você pode usar
-w <num>
para aumentar a tela.outras ferramentas que eu uso de vez em quando
diffc
Diffc é um script python que colore a saída diff unificada.
vimdiff
O Vimdiff é provavelmente tão bom se não melhor que o 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.
fonte
colordiff
partir de colordiff.org para arquivo de origem. No meu entender,sdiff
é semelhante adiff -y
sem diferenças na produção, mas com opções ligeiramente diferentes. +1 por mostrar algumas boas alternativas ao diff simples.diff -y
. A adição dessa mudança paradiff
parece ter acontecido em algum momento, ou eu nunca percebi. Além disso, aqui está um link para a página de recursos das ferramentas gnu diff . Coisas boas para usar este conjunto de ferramentas.Atualmente estou usando o diff lado a lado com grep filtrando as diferentes linhas:
-W250
aumenta a saída, de forma que eu possa ver mais dados.expand
é necessário converter abas em espaços-C3
adiciona 3 linhas de contexto à saída grep.^.{123}
corresponde à metade dos dados antes dos marcadores de diferenças lado a lado.colordiff
torna a saída mais bonita a seguirless -rS
permite que as cores ANSI sejam interpretadas (-r
) e evita linhas quebradas (-S
).Isso é um truque, alternativas são bem-vindas.
fonte
grep
regex é muito lento. Tambémdiff
tem uma-t
opção para expandir as guias.Ninguém mencionou icdiff ainda? É ótimo! Pic fala por si:
fonte
O comando linux "sdiff" mostra diferenças lado a lado, por padrão, incluindo todas as linhas, mas você pode usar várias opções para mostrar apenas diferenças:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
Onde
-t: traduz abas em espaços
-W: ignora diferenças de espaço em branco
-B: ignora linhas em branco
-s: ignora as linhas iguais
-w $ COLUMNS: usa largura total da tela
As linhas mostradas serão divididas por |, <ou> - consulte a documentação ou tente apenas.
fonte