Tengo dos archivos de registro con miles de líneas. Después del preprocesamiento, solo difieren algunas líneas. Estas líneas restantes son diferencias reales o grupos de líneas mezcladas.
Las diferencias unificadas me permiten ver las diferencias detalladas, pero dificulta la comparación manual con los globos oculares. Las diferencias de lado a lado parecen más útiles para la comparación, pero también agregan miles de líneas sin cambios. ¿Hay alguna manera de aprovechar las ventajas de ambos mundos?
Tenga en cuenta que estos archivos de registro son generados por xscope
un programa que monitorea los datos del protocolo Xorg. Estoy buscando herramientas de uso general que se puedan aplicar a situaciones similares a las anteriores, no herramientas de análisis de registro de acceso a servidores web especializadas, por ejemplo.
Hay dos archivos de registro de ejemplo disponibles en http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13
y log14
). Se puede encontrar un comando de preprocesador en el xscope-filter
archivo que elimina las marcas de tiempo y otros detalles menores.
diff
Tienes tu--suppress-common-lines
opción? pastebin.com/KZrVCNFRvimdiff
(del paquete vim ) satisfaría mejor sus necesidades: pantalla paralela, coloreada, líneas comunes plegadas. Los números de línea se pueden activar con:set number
.Respuestas:
Las 2 herramientas de diferenciación que uso el más serían MELD y sdiff .
fusionar
Meld es una GUI pero hace un gran trabajo al mostrar diferencias entre archivos. Está más orientado al desarrollo de software con características como la capacidad de mover los cambios de un lado a otro para fusionar los cambios, pero se puede usar como una herramienta de diferenciación directa de lado a lado.
sdiff
He usado esta herramienta por años. Generalmente lo ejecuto con los siguientes modificadores:
-b
Ignorar los cambios en la cantidad de espacio en blanco.-W
Ignora todos los espacios en blanco.-B
Ignora los cambios cuyas líneas están en blanco.-s
No envíe líneas comunes.A menudo, con los archivos de registro, tendrá que hacer que el ancho de las columnas sea más ancho, puede usar
-w <num>
para hacer que la pantalla sea más ancha.otras herramientas que uso de vez en cuando
diffc
Diffc es un script de Python que colorea la salida unificada de diferencias.
vimdiff
Vimdiff es probablemente tan bueno, si no mejor, que meld y puede ejecutarse desde un terminal. Siempre me olvido de usarlo, lo que, para mí, es un buen indicador de que encuentro que la herramienta es un poco difícil de usar día a día. Pero YMMV.
fuente
colordiff
de colordiff.org para el archivo fuente. A mi entender,sdiff
es similar a,diff -y
sin diferencias en la salida, pero con opciones ligeramente diferentes. +1 por mostrar algunas buenas alternativas a la diferencia simple.diff -y
. La adición de ese cambio adiff
parece haber sucedido en algún momento, o nunca me di cuenta. Además, aquí hay un enlace a la página de recursos de herramientas de gnu diff . Cosas buenas para usar este conjunto de herramientas.Actualmente estoy usando diff de lado a lado con grep filtrando las diferentes líneas:
-W250
hace que la salida sea más amplia para que pueda ver más datos.expand
es necesario convertir pestañas en espacios-C3
agrega 3 líneas de contexto 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 de seguirless -rS
permite que se interpreten los colores ANSI (-r
) y evita las líneas ajustadas (-S
).Este es un truco, las alternativas son bienvenidas.
fuente
grep
expresión regular es demasiado lenta. Tambiéndiff
tiene una-t
opción para expandir pestañas.¿Nadie mencionó icdiff todavía? ¡Es genial! Pic habla por sí mismo:
fuente
El comando linux "sdiff" muestra las diferencias de lado a lado, por defecto incluye todas las líneas, pero puede usar varias opciones para mostrar solo las diferencias:
sdiff -tWBs -w $COLUMNS config.xml config.xml.original
dónde
-t: traduce pestañas a espacios
-W: ignorar las diferencias de espacios en blanco
-B: ignorar líneas en blanco
-s: ignora las líneas que son iguales
-w $ COLUMNS: usa el ancho completo de la pantalla
Las líneas que se muestran se dividirán entre |, <o>; consulte la documentación o simplemente inténtelo.
fuente