Linux Datei nach Spaltenlänge aufteilen

OP #7359776
Lesenswert?

Moin

ich möchte eine csv Datei je nach Länge der Spalte x aufteilen und in Unterdateien kopieren. Im folgenden Beispiel wird der Text in der entsprechenden Datei nach Spalte 4 unterschieden:

1,2,3,Paul,5,6 > 4.txt a,b,c,Peter,e,f > 5.txt u,v,w,Tom,y,z > 3.txt

Wie bekomm ich sowas in Linux hin?

#7359791
Lesenswert?

Peter G. schrieb:

Moin

ich möchte eine csv Datei je nach Länge der Spalte x aufteilen und in Unterdateien kopieren. Im folgenden Beispiel wird der Text in der entsprechenden Datei nach Spalte 4 unterschieden:

1,2,3,Paul,5,6 > 4.txt a,b,c,Peter,e,f > 5.txt u,v,w,Tom,y,z > 3.txt

Wie bekomm ich sowas in Linux hin?

Dafür gibt es in der Unixwelt seit vier oder fünf Jahrzehnten die regular expressions und andere feine Helferlein, wie z.B. den streameditor sed, der files zeilenweise abarbeitet.

Wenn Dir sed zu kryptisch erscheint, kannst Du die RegEx auch im vim oder sogar in libreOffice einsetzen.

Außerdem ist das halbe Internet voll von Beispielen, wie man csv Dateien parsen kann - und regex klug einsetzt

Und wenn dir das alles zu undurchsichtig erscheint, dann hast Du das auch ohne tiefer gehende Programmierkenntnisse mit Python oder Perl in ner knappen Stunde gelöst

#7360191
Lesenswert?

Peter G. schrieb:

habs nun hinbekommen:

Vorsicht, das funktioniert bei "echten" CSV-Dateien nicht 100%ig, nur wenn du die Quelle kennst&kontrollierst.

Problem:

1
1,2,3,Paul,5,6
2
und
3
1,2,3,"Paul",5,6

sind inhaltlich eigentlich dasselbe, landen aber in verschiedenen Dateien. Den Fall kriegt man im awk aber noch einigermaßen simpel abgehandelt.

Erhöhter Schwierigkeitsgrad dann:

1
1,2,3,"Mustermann, Paul",5,6

oder

1
1,2,3,"Paul Mustermann
2
Teststraße 1
3
12345 Testort",5,6

Spätestens bei den mehrzeiligen Datenfeldern im CSV freut man sich dann über eine entsprechende Library.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren