2011-12-16 11 views
17

Jestem zaznajomiony z narzędziami, takimi jak tkDiff i WinMerge i jestem świadomy, jak odróżnić dwa pliki.Sposób wyprowadzania różnic pomiędzy dwoma plikami (najlepiej przy użyciu wiersza poleceń)

To, czego chcę, to wygenerować raport elementów w jednym pliku, które nie są obecne w innym.

Na przykład:

File1 zawiera:

apple 
cool 
dude 
flan 

File2 zawiera:

apple 
ball 
cool 
dude 
elephant 

Chcę stworzyć raport, który zawiera:

ball 
elephant 

albo lepiej jeszcze raport l to:

+ball 
+elephant 
-flan 

Czy ktoś wie o narzędziu, które może to zrobić? Najlepiej z opcjami wiersza poleceń.

Funkcja raportu w WinMerge nie jest zbyt daleko, co chciałbym, ale nie ma opcji wiersza poleceń, aby to zrobić (o ile wiem).

Z góry dziękuję.

Odpowiedz

20

Prawdopodobnie chcesz Unix comm utility. Windows versions są zawarte w GnuWin32

NAZWA

comm - compare two sorted files line by line 

SYNOPTYKA

comm [OPTION]... FILE1 FILE2 

OPIS

Compare sorted files FILE1 and FILE2 line by line. 

    With no options, produce three-column output. Column one contains 
    lines unique to FILE1, column two contains lines unique to FILE2, and 
    column three contains lines common to both files. 

    -1  suppress lines unique to FILE1 

    -2  suppress lines unique to FILE2 

    -3  suppress lines that appear in both files 
+0

Bardzo ładne. Dzięki za to. Cały GnuWin32 jest czymś, czego nie wiedziałem i jest wyraźnie kompletny ZŁOTO! Korzystając z kombinacji -1 i -3, udało mi się uzyskać to, co chciałem. Szkoda, że ​​nie ma + i - choć myślę, że nie powinienem być zbyt chciwy. –

+1

Trochę pracy z sed (także w utils) powinno pozwolić Ci dodać +/- –

+1

NICE! Musiałem wykonać różnicę między dwoma zestawami danych, a porównywanie 1,1 miliona rzędów w stosunku do 8 milionów wierszy trwało zbyt długo. Wrzuciłem do .CSV i użyłem cygwin: comm -2 -3 file1.csv file2.csv> out.csv To działało w 13 sekund! –

29

ten może pracować dla Ciebie (GNU diff):

diff -u file1 file2 | sed -n '1,2d;/^[-+]/p' 
+ball 
-flan 
+elephant 
+0

Doskonały.Lepsza odpowiedź, ponieważ działa na nieposortowanych plikach. Dodanie "sed" +/- jest miłym akcentem (wymagane przez oryginalne pytanie). –

-4

Aby porównać dane z wiersza poleceń można użyć

COMP/a/l D: \ Folder1 \ data.txt D: \ Folder2 \ data.txt

Oto inny opcje do compare files and folders with command prompt.

+1

Nie widzę, jak ta odpowiedź jest istotna dla pytania. – manWe

+0

Nie dostałem nic z tego pożytecznego: "Pliki mają różne rozmiary.". Wynik uzyskany z [FC] (http://ss64.com/nt/fc.html) jest bardziej przydatny. – ofthelit

Powiązane problemy