Entfernen Sie eine Liste von Elementen aus einer anderen Datei in Bash

Entfernen Sie eine Liste von Elementen aus einer anderen Datei in Bash

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 awkProgramm 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)

verwandte Informationen