2013-01-22 10 views
11

Ich habe zwei Textdateien, die eine eindeutige sortierte Liste von Wörtern enthalten:bash: Vergleichen Linien zweier Dateien

Datei 1:

a 
b 
c 
d 

File 2:

b 
c 

Ich brauche eine neue Datei, die nur die überflüssigen Zeilen in Datei 1 enthält, so wird das Ergebnis

a 
d 
+2

möglich Duplikat: http: // Stackoverflow .com/questions/4078933/find-difference-zwischen-zwei-text-files-with-one-item-per-line –

Antwort

14

Dies ist, was comm ist für:

comm - wählen oder Linien gemeinsam zwei Dateien ablehnen

Sie wollen

comm -23 "File 1" "File 2" 

welche unterdrücken ausgegeben Zeilen nur in Datei 2 und Linien in beiden Dateien, so dass nur Linien in Datei 1. Mehr Antworten here on Greg Wooledge's wiki

+0

Dies ist das richtige Werkzeug für diesen Job; Genau dafür wurde es entwickelt. –

2

können Sie grep verwenden:

grep -f file1.txt -vFx file2.txt 

Beachten Sie die Verwendung der Fahnen F, --fixed-strings und x, --line-regexp, um den Vergleich zu zwingen, die gesamte Linie durchgeführt werden, unter Berücksichtigung.

+1

Vielen Dank s, das funktioniert auch: 'sort file1.txt file2.txt file2.txt | uniq -u' –

2

Versuchen Sie, diese

$ join file1.txt file2.txt -v 1

$ man join

-a FILENUM 
    print unpairable lines coming from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2 
-v FILENUM 
    like -a FILENUM, but suppress joined output lines 
Verwandte Themen