2013-03-18 12 views
10

Unix terminalinden, iki dosya arasındaki farkı bulmak için diff file1 file2 kullanabiliriz. 2 dosyadaki benzerliği göstermek için benzer bir komut var mı? . (Gerekirse birçok boruları2 farklı dosyada yinelenen satırlar nasıl bulunur? UNIX

izin Her dosya bir dize cümleyle bir satır içerir; bunlar sıralanıp sort file1 | uniq ile temizlenebilir hatları çoğaltmak edilir

file1. http://pastebin.com/taRcegVn

file2: http://pastebin.com/2fXeMrHQ

Ve çıktı, her iki dosyada görünen satırları vermelidir.

ben gibi bunu yapmak için python kullanmak mümkün ama ben o terminale koymak için biraz fazla olduğunu düşünüyorum:

x = set([i.strip() for i in open('wn-rb.dic')]) 
y = set([i.strip() for i in open('wn-s.dic')]) 
z = x.intersection(y) 
outfile = open('reverse-diff.out') 
for i in z: 
    print>>outfile, i 
+0

Dosyalarınızı gibi mi görünüyorum? – paulmelnikow

+3

muhtemel yinelenen [ortak hatların nasıl gösterileceği (ters fark)?] (Http://stackoverflow.com/questions/746458/how-to-show-lines-in-common-reverse-diff) – tjameson

+0

Çoğu zaman insan dilinin cümleleri. Bazen daha fazla bilgi ile kolonize edilir. – alvas

cevap

9

@tjameson başka bir iş parçacığı içinde çözülebilir belirtildiği gibi. Bir satırın deseni değeri bu hat

  • [dup

    basılacaktır doğru olduğunda sort file1 file2 | awk 'dup[$0]++ == 1'

    1. , bazı awk temel almak awk guide bakınız: Bir başka çözüm nakletmek istiyorum $ 0], her bir anahtarın girişin her satırında olduğu , orijinal değerin 0 ve bu satırın meydana gelmesiyle arttıkça bir artış tablosudur, yeniden oluştuğunda değer 1 olmalıdır, bu nedenle dup[$0]++ == 1 doğrudur. Ardından bu satır yazdırılır.

    Not: Bu, yalnızca dosyada, soruda belirtildiği gibi çoğaltmalar olmadığında çalışır. AWK başvurmadan tekrarlanan hatların listesini almak istiyorsanız

  • +0

    'awk' dup [$ 0] ++ == 1 '' nasıl çalışır?Çözümünüz kafa karıştırıcıdan çok daha iyi durumda. – alvas

    +0

    @ 2er0 cevabı güncellendi –

    +1

    'awk'' pattern {action} 'notasyonu kullanıyor. Bu parantez içinde olmadığından, bir modeldir. Mevcut satır 0 $ 'dır. 'dup [$ 0]', satırların indekslediği bir ilişkisel dizidir; ilk oluşturulduğunda, değer 0'dır; dup [$ 0] ++ 'değeri artırır, bu nedenle ilk kez 0 ve ikinci kez 1 döndürür. Değeri 1 olduğunda, koşul doğrudur, bu nedenle varsayılan eylem (satırı yazdır) Idam edildi. –

    24

    , sen -d flag to uniq kullanabilirsiniz:

    sort file1 file2 | uniq -d 
    
    +1

    Hedefe ulaşmak için en basit aracı kullanmak için. –

    +0

    Ayrıca, -d'yi bırakmak, aradığım şey olan her iki dosyadan sadece tüm farklı satırları alır. – Aaron