Spalten aus CSVs entfernen

  Ralf Hersel   Lesezeit: 3 Minuten  🗪 1 Kommentar

In einer Linux-Shell gibt es viele Möglichkeiten, um Dateien zeilenweise zu beschneiden. Der Befehl 'cut' ist besonders einfach.

spalten aus csvs entfernen

Ich schreibe gerne über Erfahrungen aus dem Berufsleben. Daraus ergeben sich dann Tipps, die manchen Lesern helfen können. Heute hatte ich im Büro die Anforderung, aus einer grossen CSV-Datei bestimmte Spalten zu entfernen. Ja, das kann man auch in einer Tabellenkalkulation machen und die Daten dann im CSV-Format exportieren.

In diesem kleinen "Tipps & Tricks" Artikel geht es jedoch darum, wie man das im Terminal macht. Angenommen, wir haben diese CSV-Datei (input.csv):

Vorname;Nachname;Bullshit;Strasse;PLZ;Ort;Leer
Lieschen;Müller;Bullshit;Hauptstrasse 1;50757;Berlin;
Otto;Meier;Bullshit;Mittelweg 2;23010;Pusemuckel;
Hans;Hauser;Bullshit;Trampelpfad 3;82007;Nirgendwo;

Nun soll die dritte Spalte (Bullshit) und die letzte Spalte (Leer) entfernt werden. Dafür bietet eine Linux-Shell viele Möglichkeiten an: perl, python, awk, sed und cut. Für mich ist cut die einfachste Lösung. Mit diesem Befehl im Terminal erreicht man das Gewünschte:

cut -d ';' -f 1-2,4-6 < input.csv > output.csv

cat output.csv

Vorname;Nachname;Strasse;PLZ;Ort
Lieschen;Müller;Hauptstrasse 1;50757;Berlin
Otto;Meier;Mittelweg 2;23010;Pusemuckel
Hans;Hauser;Trampelpfad 3;82007;Nirgendwo

Was passiert hier? Der Befehl cut entfernt bestimmte Teile in jeder Zeile einer Datei. Der oben gezeigte Befehl legt das Trennzeichen (delimiter) in der CSV-Datei fest (-d ';'), also das Semikolon. Mit dem Parameter -f, wird eine Feldliste angegeben. Im gezeigten Beispiel (-f 1-2,4-6) werden die Spalten 1 bis 2 und 4 bis 6 beibehalten; alle anderen Spalten (Bullshit und Leer) werden nicht übernommen. Cut empfängt die Datei input.csv und schreibt in die Datei output.csv, was durch die Eingabeumleitung '<' und die Ausgabeumleitung '>' erreicht wird.

Wie ihr seht, ist der Befehl cut einfach zu verstehen und einsetzbar, wenn es um das zeilenweise Entfernen von Zeichen oder Spalten in einer Textdatei geht. Der Befehl kann noch viel mehr, als hier vorgestellt wurde. Falls euch das interessiert, lohnt sich ein Blick in die Manpage (man cut) oder eine Internetsuche nach 'linux cut examples'.

Quelle: https://www.mankier.com/1p/cut

Tags

cut, Terminal, Spalten

David
Geschrieben von David am 5. April 2024 um 20:40

Schöne Vorstellung von dem, wie "cut" im Alltag bei kleineren Formatieraufgaben im Alltag eingesetzt wird.

Problematisch wird das Verfahren, wenn die Strings die in den Feldern vorkommen selbst das Trennzeichen enthalten. Das ist möglich, wenn der String eines Feldes gequoted ist. Bei ernsthafteren Projekten vielleicht dann doch eher z.B. python mit pandas.read_csv() nehmen.