Was wäre die effizienteste Methode (keine wiederholte Befehlsausführung), um in einer Datei aufgelistete Elemente aus einer anderen Datei (ungeordnet) zu entfernen?
Man kann die Liste der nicht übereinstimmenden Elemente in der zweiten Datei leicht erhalten, indem man
cat first_file.txt second_file.txt | sort | uniq -u
aber das würde auch alle nicht übereinstimmenden Elemente aus der ersten Datei enthalten ... was nun?
Antwort1
Dieses awk
Programm durchläuft jede Datei einmal:
awk '
NR == FNR {f1[$0] = 1; next}
!($0 in f1)
' file1 file2
comm
ist für diesen Job nützlich. Es erfordert, dass die Eingabedateien sortiert werden:
# output lines unique to file2
comm -13 <(sort file1) <(sort file2)