Apakah ada format diff sisi-demi-sisi yang kental?

40

Saya memiliki dua file log dengan ribuan baris. Setelah pra-pemrosesan, hanya beberapa baris yang berbeda. Garis yang tersisa ini adalah perbedaan nyata, atau kelompok garis yang dikocok.

Perbedaan unified memungkinkan saya untuk melihat perbedaan terperinci, tetapi itu membuat perbandingan manual dengan bola mata sulit. Perbedaan berdampingan tampaknya lebih berguna untuk perbandingan, tetapi juga menambahkan ribuan garis yang tidak berubah. Apakah ada cara untuk mendapatkan keuntungan dari kedua dunia?

Catatan, file-file log ini dihasilkan oleh xscopeyang merupakan program yang memonitor data protokol Xorg. Saya mencari alat untuk keperluan umum yang dapat diterapkan pada situasi yang mirip dengan di atas, bukan alat analisis log akses server web khusus misalnya.


Dua contoh file log tersedia di http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13dan log14). Perintah pra-prosesor dapat ditemukan dalam xscope-filterfile yang menghilangkan cap waktu dan detail kecil lainnya.

Lekensteyn
sumber
2
Apakah Anda diffpunya --suppress-common-linespilihan? pastebin.com/KZrVCNFR
manatwork
1
@Manatwork Bagus, benar. Adakah cara untuk menambahkan lebih banyak konteks (mis. Nomor baris)?
Lekensteyn
5
Maka mungkin vimdiff(dari paket vim ) akan melayani kebutuhan Anda dengan lebih baik: tampilan paralel, berwarna, garis-garis umum dilipat. Nomor baris dapat dihidupkan dengan :set number.
manatwork
Saya pikir Anda harus menempatkan vimdiff sebagai jawaban :)
Kotte
1
Alat CLI lebih disukai, tetapi alat GUI juga diizinkan jika cukup kecil. Saya sudah mencoba kdiff3, tetapi masih menghasilkan banyak detail. Idealnya, saya tidak melihat semua detail yang tidak perlu. Saya akan melampirkan dua set data.
Lekensteyn

Jawaban:

37

2 alat diff yang paling sering saya gunakan adalah berbaur dan sdiff .

berbaur

Meld adalah GUI tetapi melakukan pekerjaan besar dalam menunjukkan perbedaan antar file. Ini lebih diarahkan untuk pengembangan perangkat lunak dengan fitur-fitur seperti kemampuan untuk memindahkan perubahan dari satu sisi ke sisi lain untuk menggabungkan perubahan tetapi dapat digunakan hanya sebagai alat pemisah yang berdampingan.

    ss berbaur

    ss dari sorotan kode berbaur

sdiff

Saya telah menggunakan alat ini selama bertahun-tahun. Saya biasanya menjalankannya dengan sakelar berikut:

$ sdiff -bBWs file1 file2
  • -b Abaikan perubahan jumlah ruang putih.
  • -W Abaikan semua ruang putih.
  • -B Abaikan perubahan yang semua barisnya kosong.
  • -s Jangan tampilkan garis yang sama.

Seringkali dengan file log Anda harus membuat lebar kolom lebih lebar, Anda dapat menggunakan -w <num>untuk membuat layar lebih lebar.

alat lain yang saya gunakan mati-matian

diffc

Diffc adalah skrip python yang mewarnai keluaran unified diff.

$ diffc [OPTION] FILE1 FILE2

             ss dari diffc

vimdiff

Vimdiff mungkin sama baiknya jika tidak lebih baik dari berbaur dan dapat dijalankan dari terminal. Saya selalu lupa untuk menggunakannya yang, bagi saya, merupakan indikator yang baik bahwa saya menemukan alat ini sedikit sulit untuk digunakan sehari-hari. Tapi YMMV.

                                    ss of vimdiff

slm
sumber
1
Salah satu fitur hebat Meld, sayangnya tidak terlihat di tangkapan layar Anda, adalah penyorotan sintaksis file kode sumber.
manatwork
Iya nih. Saya dulu menggunakan vimdiff setiap saat, saya sejak pindah ke menggunakan berbaur, saya merasa lebih mudah digunakan dan hanya lebih mudah untuk melihat apa yang dikatakannya kepada saya vs vimdiff.
slm
@manatwork - menambahkan tautan Anda ke jawabannya, terima kasih atas umpan baliknya!
slm
1
Tampak hebat untuk kode sumber, tetapi tidak terlalu banyak untuk membandingkan file log. Saya sering menggunakan colordiffdari colordiff.org untuk file sumber. Untuk pemahaman saya, sdiffmirip diff -ydengan tanpa perbedaan dalam output tetapi opsi yang sedikit berbeda. +1 untuk menunjukkan beberapa alternatif yang bagus untuk diff biasa.
Lekensteyn
Saya tidak pernah menggunakan colordiff, saya harus memeriksanya. Anda benar di diff -y. Penambahan peralihan itu difftampaknya telah terjadi di beberapa titik, atau saya tidak pernah menyadarinya. Selain itu, inilah tautan ke halaman sumber daya alat gnu diff . Barang bagus untuk menggunakan rangkaian alat ini.
slm
20

Saat ini saya menggunakan diff berdampingan dengan grep memfilter garis yang berbeda:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • Opsi -W250membuat output lebih luas sehingga saya bisa melihat lebih banyak data.
  • expand diperlukan untuk mengonversi tab menjadi spasi
  • -C3 menambahkan 3 baris konteks ke output grep.
  • ^.{123} cocok dengan setengah dari data sebelum spidol berdampingan.
  • colordiff membuat output lebih cantik untuk diikuti
  • less -rSmemungkinkan warna ANSI ditafsirkan ( -r) dan mencegah garis terbungkus ( -S).

Ini adalah retasan, alternatif dipersilakan.

Lekensteyn
sumber
1
Ini luar biasa.
Pat Myron
Ide bagus. Sayangnya grepregex terlalu lambat. Juga diffmemiliki -topsi untuk membuka tab.
Timmmm
12

Belum ada yang menyebutkan icdiff ? Itu bagus! Pic berbicara untuk dirinya sendiri: icdiff

Radek Postołowicz
sumber
Ini adalah alat yang sangat rapi, juga tersedia di aur.
Uzumaki D. Ichigo
Terlalu lambat untuk file besar.
Timmmm
0

Perintah "sdiff" linux menunjukkan perbedaan berdampingan, secara default termasuk semua baris, tetapi Anda dapat menggunakan berbagai opsi untuk hanya menunjukkan perbedaan:

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

dimana

-t: menerjemahkan tab ke spasi

-W: abaikan perbedaan spasi putih

-B: abaikan garis kosong

-s: abaikan garis yang sama

-w $ COLUMNS: gunakan layar penuh

Baris yang ditampilkan akan dibagi oleh |, <, atau> - lihat dokumentasi, atau coba saja.

Moshe Yudkowsky
sumber