385 Stimmen

Schneller Weg, um Zeilen in einer Datei zu finden, die in einer anderen nicht vorhanden sind?

Ich habe zwei große Dateien (Sets von Dateinamen). Etwa 30.000 Zeilen in jeder Datei. Ich versuche einen schnellen Weg zu finden, um Zeilen in Datei1 zu finden, die nicht in Datei2 vorhanden sind.

Zum Beispiel, wenn dies Datei1 ist:

Zeile1
Zeile2
Zeile3

Und das ist Datei2:

Zeile1
Zeile4
Zeile5

Dann sollte mein Ergebnis/Ausgabe sein:

Zeile2
Zeile3

Dies funktioniert:

grep -v -f file2 file1

Aber es ist sehr, sehr langsam, wenn es auf meine großen Dateien angewendet wird.

Ich vermute, es gibt eine gute Möglichkeit, dies mit diff() zu tun, aber die Ausgabe sollte nur die Zeilen sein, nichts anderes, und ich kann keinen Schalter dafür finden.

Kann mir jemand helfen, einen schnellen Weg zu finden, dies zu tun, unter Verwendung von Bash und grundlegenden Linux-Binärdateien?

BEARBEITEN: Um auf meine eigene Frage einzugehen, dies ist der beste Weg, den ich bisher gefunden habe, um diff() zu verwenden:

diff file2 file1 | grep '^>' | sed 's/^>\ //'

Sicherlich muss es einen besseren Weg geben?

2voto

baustin Punkte 21

Normalerweise mache ich das, indem ich das --suppress-common-lines Flag verwende, beachte jedoch, dass dies nur funktioniert, wenn du es im side-by-side Format machst.

diff -y --suppress-common-lines datei1.txt datei2.txt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X