Yan yana yoğunlaşmış bir format var mı?


40

Binlerce satırlık iki günlük dosyam var. Ön işlemden sonra, sadece bazı satırlar farklılık gösterir. Bu kalan çizgiler gerçek farklar veya karışık satır gruplarıdır.

Birleştirilmiş farklar ayrıntılı farkları görmeme izin veriyor, ancak gözler ile elle karşılaştırmayı zorlaştırıyor. Yan yana farklılıklar karşılaştırma için daha yararlı görünüyor, ancak aynı zamanda binlerce değişmeyen satır ekliyor. Her iki dünyanın da avantajlarından yararlanmanın bir yolu var mı?

Not: Bu günlük dosyaları, xscopeXorg protokol verilerini izleyen bir programdır. Örneğin, uzman web sunucusu erişim günlüğü analiz araçları gibi, yukarıdakilere benzer durumlara uygulanabilecek genel amaçlı araçlar arıyorum.


İki örnek günlük dosyası http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13ve log14) adresinde bulunabilir . xscope-filterDosyada, zaman damgalarını ve diğer küçük ayrıntıları kaldıran bir ön işlemci komutu bulunabilir .


2
Senin mu diffvar --suppress-common-linesseçeneğini? pastebin.com/KZrVCNFR
manatwork

1
@ manatwork Güzel, öyle. Daha fazla içerik eklemenin herhangi bir yolu (örneğin, satır numaraları)?
Lekensteyn

5
O zaman belki vimdiff( vim paketinden) ihtiyaçlarınıza daha iyi cevap verir: paralel ekran, renklendirilmiş, ortak çizgiler katlanmış. Satır numaraları ile açılabilir :set number.
Manat işi

Bence cevap olarak seslendirmelisin :)
Kotte

1
CLI araçları tercih edilir, ancak yeterince küçüklerse GUI araçlarına da izin verilir. Kdiff3'ü denedim, ama hala çok fazla ayrıntı üretti. İdeal olarak, gereksiz tüm ayrıntıları görmüyorum. İki veri seti ekleyeceğim.
Lekensteyn

Yanıtlar:


37

Ben en çok kullandığınız 2 fark araçları olacağını zihin birleştirme ve sdiff .

zihin birleştirme

Meld bir GUI'dir ancak dosyalar arasında farklılıklar göstermek konusunda harika bir iş çıkarır. Değişiklikleri birleştirmek için değişiklikleri bir taraftan diğerine taşıma kabiliyeti gibi özelliklere sahip yazılım geliştirme için daha fazla tasarlanmıştır, ancak sadece yan yana düz bir araç olarak kullanılabilir.

    kaynak ss

    kaynak kodunun vurgulanması

sdiff

Bu aracı yıllardır kullandım. Genelde aşağıdaki anahtarlarla çalıştırıyorum:

$ sdiff -bBWs file1 file2
  • -b Beyaz boşluk miktarındaki değişiklikleri yoksay.
  • -W Tüm beyaz boşlukları yoksay.
  • -B Satırları boş olan değişiklikleri yoksay.
  • -s Ortak satırlar vermeyin.

Genellikle günlük dosyalarında sütunların genişliğini genişletmek için ihtiyacınız olacak -w <num>, ekranı genişletmek için kullanabilirsiniz.

kullandığım diğer araçlar

diffc

Diffc , birleştirilmiş diff çıktısını renklendiren bir python betiğidir.

$ diffc [OPTION] FILE1 FILE2

             diffc ss

vimdiff

Vimdiff , meld'den daha iyi olmasa da bir terminalden çalıştırılabiliyorsa, muhtemelen iyidir. Her zaman kullanmayı unutuyorum, ki bu bana göre, aracı günden güne kullanmak için biraz zorlu bulduğumun iyi bir göstergesi. Fakat YMMV.

                                    vimdiff


1
Meld’ün harika bir özelliği ekran görüntüsünüzde görünmeyen maalesef kaynak kod dosyalarının sözdizimidir .
Manatwork

Evet. Ben her zaman vimdiff kullandım, o zamandan beri meld kullanmaya başladım, kullanımı daha kolay buldum ve bana ne söylediğini görmek çok daha kolaydı.
slm

@manatwork - Cevabınıza bağlantınızı ekleyin, geri bildiriminiz için teşekkürler!
slm

1
Kaynak kodu için harika görünüyor, ancak günlük dosyalarını karşılaştırmak için çok fazla değil. Sık sık kullanmak colordiffgelen colordiff.org kaynak dosyası için. Benim anlayış için, sdiffbenzer diff -yhiçbir çıkış farklılıklara ama biraz farklı seçeneklerle. Düz fark için bazı iyi alternatifler göstermek için +1.
Lekensteyn

Colordiff'i hiç kullanmadım, kontrol etmem gerekecek. Konusunda haklısın diff -y. Bu anahtarın eklenmesi bir diffnoktada olmuş gibi görünüyor, ya da hiç farketmedim. Ek olarak, burada, gnu diff tools kaynak sayfasına bir link verilmiştir . Bu araç takımını kullanmak için iyi şeyler.
slm

20

Şu anda farklı satırları filtrelemek grep ile yan yana diff kullanıyorum:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • Seçenek -W250daha fazla veri görebileceğim şekilde çıktıyı genişletir.
  • expand sekmeleri boşluklara dönüştürmek için gereklidir
  • -C3 grep çıktısına 3 satır bağlam satırı ekler.
  • ^.{123} Yan yana fark işaretlerinden önce verinin yarısını eşleştirir.
  • colordiff çıktıyı takip etmek daha güzel hale getirir
  • less -rSANSI renklerinin yorumlanmasına izin verir ( -r) ve sarılmış çizgileri ( -S) engeller .

Bu bir kesmek, alternatifler bekliyoruz.


1
Bu harika.
Pat Myron

İyi fikir. Maalesef, grepregex çok yavaş. Ayrıca sekmeleri genişletmek için diffbir -tseçenek var.
Timmmm


0

Linux "sdiff" komutu, tüm satırları içeren varsayılan olarak yan yana farklılıkları gösterir, ancak yalnızca farklılıkları göstermek için çeşitli seçenekleri kullanabilirsiniz:

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

nerede

-t: sekmeleri boşluklara çevir

-W: boşluk farklarını yoksay

-B: boş satırları yoksay

-s: aynı olan satırları yoksay

-w $ COLUMNS: tam ekran genişliği kullan

Gösterilen satırlar |, <veya> ile bölünecektir - belgelere bakın veya sadece deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.