Ich habe zwei Listen, eine vollständige Liste und eine unvollständige Liste. Ich möchte ein Bash-Skript, das die vollständige Liste nach Zeilen durchsucht, die im Teil enthalten sind. Wenn dies der Fall ist, werden sie aus der vollständigen Liste entfernt. Kann jemand helfen?
text-processing
Ameisenbauer
quelle
quelle
Antworten:
grep
kann mehrere Muster aus einer Datei lesen, eines pro Zeile. Kombinieren Sie diese Option mit den Optionen,-v
um nicht übereinstimmende Zeilen auszugeben und-F
Zeichenfolgen anstelle von Regex zuzuordnen und-x
die Übereinstimmung der gesamten Zeile zu fordern.Offensichtlich ist die zweite Befehlszeile nur, wenn Sie die Datei mit der vollständigen Liste überschreiben möchten.
Wenn die Teilliste sehr groß ist und es Ihnen nichts ausmacht, die Liste neu zu ordnen, ist sie
join
möglicherweise schneller.quelle
Sie können auch verwenden -
Die Dateien müssen sortiert werden, damit der Befehl ordnungsgemäß funktioniert. Die Einträge aus Datei2 werden in der Ausgabe des Befehls aus Datei1 entfernt
quelle
comm
. Ich mag den Ansatz, dencomm
ich mit grep gemacht habe, sehr, aber comm ist gut, um Dateien in alle Richtungen zu vergleichen.Wenn keine der Listen Elemente wiederholt hat, funktioniert Folgendes:
Wenn die Listen wiederholte Elemente enthalten können und Sie Wiederholungen nur ignorieren möchten, können Sie das
-u
Flag in den Unterbefehlen sortieren verwenden, die nur eindeutige Elemente ausgeben.quelle