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.