Sie müssen comm
verwenden :
comm -13 first.txt second.txt
wird die Arbeit erledigen.
p.s. Reihenfolge der ersten und zweiten Datei in der Befehlszeile ist wichtig.
Außerdem müssen Sie die Dateien möglicherweise vorher sortieren:
comm -13 <(sort first.txt) <(sort second.txt)
Falls Dateien numerisch sind, fügen Sie -n
hinzu Option zu sort
.
Das sollte funktionieren
comm -13 <(sort file1) <(sort file2)
Es scheint, dass sort -n (numeric) nicht mit comm arbeiten kann, das sort (alphanumeric) intern verwendet
f1.txt
1
2
21
50
f2.txt
1
3
21
50
21 sollte in der dritten Spalte erscheinen
#WRONG
$ comm <(sort -n f1.txt) <(sort -n f2.txt)
1
2
21
3
21
50
#OK
$ comm <(sort f1.txt) <(sort f2.txt)
1
2
21
3
50
cat f1.txt f2.txt | sort |uniq > file3
grep -Fxv -f first-file.txt second-file.txt
Sucht grundsätzlich nach allen Zeilen in second-file.txt
die mit keiner Zeile in first-file.txt
übereinstimmen . Kann langsam sein, wenn die Dateien groß sind.
Sobald Sie die Dateien sortiert haben (verwenden Sie sort -n
wenn sie numerisch sind), dann comm
sollte auch funktionieren. Welchen Fehler gibt es? Versuchen Sie Folgendes:
comm -23 second-file-sorted.txt first-file-sorted.txt