Listen vergleichen mit comm

Di, 7. Februar 2023, Lioh Möller

Angenommen wir haben eine Textdatei datei_1.txt mit folgendem Inhalt:

GNU
Linux
Microsoft
Tux
Apple

und eine zweite Datei, welche Zeilen enthält, die aus der ersten Datei entfernt werden sollen, nennen wir sie datei_mit_zu_löschenden_zeilen.txt

Apple
Microsoft

Dazu eignen sich verschiedene Werkzeuge, beispielsweise comm, welches zwei sortierte Listen miteinander vergleichen kann. Ziel ist die Ausgabe einer um die Inhalte der 2. Datei bereinigte datei_1.txt.

Ohne die Angabe weiterer Parameter gibt comm folgende Spalten aus:

1 - Zeilen, welche nur in Datei 1 vorkommen
2 - Zeilen die nur in Datei 2 vorkommen
3 - Zeilen welche in beiden Dateien vorkommen

Um eine Spalte in der Ausgabe zu unterdrücken, kann der Parameter - gefolgt von der Spaltennummer angegeben werden. comm -12 würde beispielsweise nur Zeilen ausgeben, welche in beiden Dateien vorkommen.

Da wir allerdings datei_1.txt um den Inhalt der 2. Datei bereinigen möchten, muss der Parameter -23 genutzt werden. Darüber hinaus erwartet comm eine sortierte Liste als Eingabeformat.

 comm -23 <(sort datei_1.txt) <(sort datei_mit_zu_löschenden_zeilen.txt)

Kennst du weitere Methoden, um unter Linux das oben beschriebene Ziel zu erreichen? Teile sie uns in den Kommentaren oder in unserer Community mit.

Tags

Liste, Sortierfunktion, Bereinigung