Linux Datei nach Spaltenlänge aufteilen

OP #7359776

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?

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

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

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.