Wie finde ich den Unterschied zwischen zwei Dateien?

8

Ich habe zwei Dateien A und B. Ich möchte alle Zeilen in A finden, die nicht in B sind. Was ist der schnellste Weg, dies in bash / mit Standard-Linux-Utilities zu tun? Folgendes habe ich bisher versucht:

%Vor%

Es funktioniert, aber es ist langsam. Gibt es einen schnelleren Weg, dies zu tun?

    
spinlok 07.05.2012, 21:33
quelle

3 Antworten

20

Die BashFAQ beschreibt genau das dies mit comm , was die kanonisch korrekte Methode ist.

%Vor%

diff ist für diese Aufgabe weniger geeignet, da es versucht, Blöcke statt einzelner Zeilen zu verwenden. Daher sind die verwendeten Algorithmen komplexer und weniger speichereffizient.

comm ist Teil der Single Unix Specification seit SUS2 (1997).

    
Charles Duffy 07.05.2012, 21:43
quelle
2

Wenn Sie nur Zeilen möchten, die sich in der Datei A , aber nicht in B befinden, können Sie die Dateien sortieren und mit diff vergleichen.

%Vor%     
tonio 07.05.2012 21:43
quelle
1

Das Programm 'diff' ist ein Standard-Unix-Programm, das Unterschiede zwischen Dateien untersucht.

%Vor%

Mit einem einfachen Grep und Cut kann man die Linien in A auswählen, nicht in B. Beachten Sie, dass der Schnitt ziemlich einfach ist und Leerzeichen in den Linien ihn abwerfen würden ... aber das Konzept ist da.

%Vor%     
user289086 07.05.2012 21:42
quelle

Tags und Links