¿Hay un formatting condensado lado a lado diff?

Tengo dos files de logging con miles de líneas. Después del preprocesamiento, solo algunas líneas difieren. Estas líneas restantes son diferencias reales o grupos de líneas mezcladas.

Diferencias unificadas me permiten ver las diferencias detalladas, pero dificulta la comparación manual con los ojos. Difs lado a lado parece más útil para la comparación, pero también agrega miles de líneas sin cambios. ¿Hay alguna manera de get la ventaja de ambos mundos?

Tenga en count que estos files de logging los genera xscope que es un progtwig que supervisa los datos del protocolo de Xorg. Estoy buscando herramientas de uso general que se puedan aplicar a situaciones similares a las anteriores, herramientas de análisis de logging de acceso de server web no especializadas, por ejemplo.


Dos files de logging de ejemplo están disponibles en http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13 y log14 ). Se puede encontrar un command de pre-procesador en el file xscope-filter que elimina las marcas de time y otros detalles menores.

Las 2 herramientas de diff que uso más serían meld y sdiff .

meld

Meld es una GUI pero hace un gran trabajo al mostrar diffs entre files. Está más orientado al desarrollo de software con características tales como la capacidad de mover los cambios de un lado a otro para fusionar los cambios, pero se puede utilizar como una herramienta directa de lado a lado.

ss de meld

ss de resaltar el código de meld

sdiff

He usado esta herramienta por años. Generalmente lo ejecuto con los siguientes modificadores:

 $ sdiff -bBWs file1 file2 
  • -b Ignora los cambios en la cantidad de espacio en blanco.
  • -W Ignora todo el espacio en blanco.
  • -B Ignora los cambios cuyas líneas están todas en blanco.
  • -s No da salida a líneas comunes.

A menudo, con los files de logging necesitará ampliar el ancho de las columnas, puede usar -w <num> para ampliar la pantalla.

otras herramientas que uso de vez en cuando

diffc

Diffc es una secuencia de commands python que colorea la salida de diff unificada.

 $ diffc [OPTION] FILE1 FILE2 

ss de diffc

vimdiff

Vimdiff es probablemente tan bueno, si no mejor, que la fusión y se puede ejecutar desde una terminal. Siempre me olvido de usarlo, lo cual, para mí, es un buen indicador de que la herramienta me resulta un poco difícil de usar día a día. Pero YMMV.

ss de vimdiff

Actualmente estoy usando diff lado a lado con grep filtrando las diferentes líneas:

 diff -y -W250 log.txt log2.txt | expand | \ grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS 
  • La opción -W250 la salida para que pueda ver más datos.
  • expand es necesario para convertir tabs en espacios
  • -C3 agrega 3 líneas de context a la salida grep.
  • ^.{123} coincide con la mitad de los datos antes de los marcadores de diferencias uno al lado del otro.
  • colordiff hace que la salida sea más bonita para seguir
  • less -rS permite interpretar los colors ANSI ( -r ) y evita las líneas envolventes ( -S ).

Este es un truco, las alternativas son bienvenidas.

¿Nadie mencionó icdiff todavía? ¡Es genial! Pic habla por sí mismo: icdiff