= Tips & Tricks zum Umgang mit CSV-Dateien =

== Split mit Headern ==

Hin und wieder möchte ich eine CSV-Datei in mehrere Teile aufteilen, (z.B. um sie in kleineren Paketen bearbeiten zu können). Dazu gibt es eine Programm:

* http://www.scaled-solutions.com/blog/open-source-csv-file-splitter

Das brauchen wir aber nicht, weil wir ja LUGer und damit Shell-Magier sind. :-) 

Dateien aufteilen kann man in der Shell grundsätzlich mit dem '''split'''-Kommando. Die Kunst ist nun, die Headerzeilen aus der ursprünglichen Datei in die gesplitteten wieder einzufügen.

Ich mache das so:

  ( tail -n+2 datei.csv | split -l 100 -d - gabe ); for file in gabe* ; do ( ( head -n 1 datei.csv ; cat $file ) > aus${file}.csv ); done; rm gabe* ; ls ausgabe*

Da dieser Einzeiler die nackten Unix-Tools benutzt, arbeitet er übrigens mit "Unix-Zeilen" und nicht mit "CSV-Zeilen", d.h. wenn eine CSV-Zeile Zeilenvorschübe enthält, gibts ggf. Ärger. Wer den vermeiden will, kann sich ja mal das Debian-Paket "csvtool" ansehen. Das kann man hier bestimmt zur Verbesserung einbauen.