Esiste un formato diff affiancato condensato?


40

Ho due file di registro con migliaia di righe. Dopo la pre-elaborazione, solo alcune righe differiscono. Queste linee rimanenti sono differenze reali o gruppi di linee mescolate.

Le differenze unificate mi permettono di vedere le differenze dettagliate, ma rende difficile il confronto manuale con i bulbi oculari. Le differenze side-by-side sembrano più utili per il confronto, ma aggiunge anche migliaia di linee invariate. C'è un modo per ottenere il vantaggio di entrambi i mondi?

Nota, questi file di registro sono generati da xscopeun programma che controlla i dati del protocollo Xorg. Sto cercando strumenti di uso generale che possono essere applicati a situazioni simili a quelle precedenti, ad esempio strumenti di analisi dei log di accesso al server web non specializzati.


Due file di registro di esempio sono disponibili su http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13e log14). Un comando pre-processore può essere trovato nel xscope-filterfile che rimuove i timestamp e altri dettagli minori.


2
Il vostro diffavere --suppress-common-linesun'opzione? pastebin.com/KZrVCNFR
manatwork

1
@manatwork Bello, lo fa. Un modo per aggiungere più contesto (ad es. Numeri di riga)?
Lekensteyn,

5
Quindi forse vimdiff(dal pacchetto vim ) servirebbe meglio le tue esigenze: visualizzazione parallela, colorata, linee comuni piegate. I numeri di riga possono essere attivati ​​con :set number.
arte

Penso che dovresti mettere Vimdiff come una risposta :)
Kotte,

1
Gli strumenti della CLI sono preferiti, ma gli strumenti della GUI sono consentiti anche se sono abbastanza piccoli. Ho provato kdiff3, ma ha ancora prodotto molti dettagli. Idealmente, non vedo tutti i dettagli inutili. Allegherò due set di dati.
Lekensteyn,

Risposte:


37

I 2 strumenti diff che utilizzo di più sarebbero meld e sdiff .

meld

Meld è una GUI ma fa un ottimo lavoro nel mostrare differenze tra i file. È orientato maggiormente allo sviluppo del software con funzionalità come la possibilità di spostare le modifiche da una parte all'altra per unire le modifiche, ma può essere utilizzato solo come uno strumento di differenza side-by-side.

    ss di fusione

    ss di evidenziazione del codice di fusione

sdiff

Ho usato questo strumento per anni. In genere lo eseguo con i seguenti switch:

$ sdiff -bBWs file1 file2
  • -b Ignora i cambiamenti nella quantità di spazio bianco.
  • -W Ignora tutto lo spazio bianco.
  • -B Ignora le modifiche le cui linee sono tutte vuote.
  • -s Non emette linee comuni.

Spesso con i file di registro è necessario allargare la larghezza delle colonne, è possibile utilizzare -w <num>per allargare lo schermo.

altri strumenti che utilizzo off e on

diffc

Diffc è uno script Python che colora l'output diff unificato.

$ diffc [OPTION] FILE1 FILE2

             ss di diffc

vimdiff

Vimdiff è probabilmente buono se non migliore della fusione e può essere eseguito da un terminale. Dimentico sempre di usarlo anche se, per me, è un buon indicatore che trovo lo strumento un po 'difficile da usare ogni giorno. Ma YMMV.

                                    ss di vimdiff


1
Una grande caratteristica di Meld, purtroppo non visibile sullo screenshot, è l' evidenziazione della sintassi dei file di codice sorgente.
arte

Sì. Usavo sempre Vimdiff, da allora mi sono trasferito ad usare Meld, lo trovo più facile da usare ed è solo più facile vedere cosa mi dice vs. Vimdiff.
slm

@manatwork - aggiunto il tuo link alla risposta, grazie per il feedback!
slm

1
Sembra ottimo per il codice sorgente, ma non tanto per il confronto dei file di registro. Uso spesso colordiffda colordiff.org per il file sorgente. Secondo la mia comprensione, sdiffè simile a diff -ysenza differenze nell'output ma con opzioni leggermente diverse. +1 per mostrare alcune buone alternative al semplice diff.
Lekensteyn,

Non ho mai usato Colordiff, dovrò verificarlo. Hai ragione sul diff -y. L'aggiunta di quel passaggio diffsembra essere avvenuta ad un certo punto, o non l'ho mai notato. Inoltre, ecco un link alla pagina delle risorse degli strumenti diff gnu . Roba buona per l'utilizzo di questa suite di strumenti.
slm

20

Attualmente sto usando side-by-side diff con grep filtrando le diverse linee:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • L'opzione -W250rende l'output più ampio in modo che io possa vedere più dati.
  • expand è necessario per convertire le schede in spazi
  • -C3 aggiunge 3 righe di contesto all'output grep.
  • ^.{123} corrisponde alla metà dei dati prima dei marcatori differ side-by-side.
  • colordiff rende l'output più bello da seguire
  • less -rSconsente l'interpretazione dei colori ANSI ( -r) e impedisce le linee a capo ( -S).

Questo è un trucco, le alternative sono benvenute.


1
Questo è meraviglioso.
Pat Myron,

Bella idea Sfortunatamente la grepregex è troppo lenta. Inoltre diffha una -tpossibilità di espandere le schede.
Timmmm,


0

Il comando "sdiff" di Linux mostra le differenze affiancate, di default includendo tutte le linee, ma puoi usare varie opzioni per mostrare solo le differenze:

sdiff -tWBs -w $COLUMNS config.xml config.xml.original

dove

-t: traduce le schede in spazi

-W: ignora le differenze di spazio bianco

-B: ignora le righe vuote

-s: ignora le linee uguali

-w $ COLONNE: usa l'intera larghezza dello schermo

Le righe mostrate saranno divise per |, <, o> - vedere la documentazione o semplicemente provarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.