Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

unix standard tools mit CSV Dateien

0 views
Skip to first unread message

Andreas Leitgeb

unread,
Oct 12, 2023, 8:30:05 AM10/12/23
to
awk, sort, cut, join, ...
und wohl noch etliche weitere, die eine Option "Feldtrenner" haben,
und dann eben nach diesem Trenner die Zeile zerstückeln, und die
einzelnen Felder behandeln.

Ich habe in letzter Zeit aber immer öfter mit CSV Dateien zu tun,
in denen Felder das Trennzeichen auch literal als Teil eines Feldes
enthalten, und zu diesem Zwecke "gequotet" sind:
z.B.:
"das ""erste"" Feld;";"das ""zweite"" Feld; auch mit einem "";"""

Wie behandelt man unter unix/linux solche Dateien am sinnvollsten?

- man schreibt (oder findet?) einen Präprozessor, der das quoted-CSV
mit den quotes korrekt parst, und ein simples CSV ohne quotes aber
mit einem "out-of-band" Trennzeichen erzeugt, wenn es eines gibt.

- oder vielleicht haben die standard tools schon optionen, um mit quotes
richtig umgehen zu können, die ich erst noch nachlernen sollte...

Christoph 'Mehdorn' Weber

unread,
Oct 16, 2023, 11:00:24 AM10/16/23
to
Hallo!

* Andreas Leitgeb <a...@logic.at>:

> Ich habe in letzter Zeit aber immer öfter mit CSV Dateien zu tun,
> in denen Felder das Trennzeichen auch literal als Teil eines Feldes
> enthalten, und zu diesem Zwecke "gequotet" sind:
> z.B.:
> "das ""erste"" Feld;";"das ""zweite"" Feld; auch mit einem "";"""
>
> Wie behandelt man unter unix/linux solche Dateien am sinnvollsten?

Ich neige da zu Tools/Sprachen, die direkt mit CSV umgehen können.

> - man schreibt (oder findet?) einen Präprozessor, der das quoted-CSV
> mit den quotes korrekt parst, und ein simples CSV ohne quotes aber
> mit einem "out-of-band" Trennzeichen erzeugt, wenn es eines gibt.

Die ASCII-Zeichen 0x1c bis 0x1f sind als spezielle Trennzeichen
gedacht und in normalen Texten eher selten anzutreffen und böten
sich als Ersatz an. Besonders 0x1e (record seperator) springt ins
Auge.

> - oder vielleicht haben die standard tools schon optionen, um
> mit quotes richtig umgehen zu können, die ich erst noch
> nachlernen sollte...

Mein apt schlägt jedenfalls vor, mal einen Blick auf die Pakete
cvskit, csvtool und xml2 zu werfen, wenn du bei den genannten
Tools zum Weiterverwursten bleiben willst.

Christoph

--
Was meinst Du, wie recovery es ist, zweimal mit dem Finger um die
Krempe einer Melone zu streichen und zweimal auf dieselbe zu tippen,
um den naechsten Marketing-Strategen ist einen Frosch zu verwandeln?
Es muss der richtige Hut sein. (Roger Schwentker)

Andreas Leitgeb

unread,
Oct 18, 2023, 3:11:16 AM10/18/23
to
Christoph 'Mehdorn' Weber <spam...@das-mehdorn.de> wrote:
> Hallo!
> * Andreas Leitgeb <a...@logic.at>:
>> Ich habe in letzter Zeit aber immer öfter mit CSV Dateien zu tun,
>> in denen Felder das Trennzeichen auch literal als Teil eines Feldes
>> enthalten, und zu diesem Zwecke "gequotet" sind:
>> z.B.:
>> "das ""erste"" Feld;";"das ""zweite"" Feld; auch mit einem "";"""
>> Wie behandelt man unter unix/linux solche Dateien am sinnvollsten?
> Ich neige da zu Tools/Sprachen, die direkt mit CSV umgehen können.

ja, es mit loffice zu öffnen ist für manche Aktionen auch eine option...

>> - man schreibt (oder findet?) einen Präprozessor, der das quoted-CSV
>> mit den quotes korrekt parst, und ein simples CSV ohne quotes aber
>> mit einem "out-of-band" Trennzeichen erzeugt, wenn es eines gibt.
> Die ASCII-Zeichen 0x1c bis 0x1f sind als spezielle Trennzeichen
> gedacht und in normalen Texten eher selten anzutreffen und böten
> sich als Ersatz an. Besonders 0x1e (record seperator) springt ins
> Auge.

Ja, gute Vorschläge, falls mal der noch naheliegendere TAB nicht oob ist.

In der Vergangenheit (in prä-utf8 Zeiten) hat sich da auch schon der
hochgestellte dreier ³ bewährt, weil er im iso-8859-1 ist, auf der
Tastatur ist, sehr selten in der payload vorkommt, aber (im Gegensatz
zu ^I und ^[ - ^?) auch eine terminal-ausgabe "überlebt".

>> - oder vielleicht haben die standard tools schon optionen, um
>> mit quotes richtig umgehen zu können, die ich erst noch
>> nachlernen sollte...
> Mein apt schlägt jedenfalls vor, mal einen Blick auf die Pakete
> cvskit, csvtool und xml2 zu werfen, wenn du bei den genannten
> Tools zum Weiterverwursten bleiben willst.

csvtool habe ich jetzt installiert - 1000 Dank! Das wird mir wohl
in einigen Fällen recht hilfreich sein :-) Die Umwandlung in
ein simples csv mit selbstgewähltem SEP könnte ich mit
csvtool format '%1,%2,%3,...\n'
hinbekommen, zurück-umwandlung ist damit vermutlich schwieriger,
wenn manche Zellen-inhalte von sich aus mit einem Gänsefüßchen
beginnen.

Das csvformat aus dem csvkit scheint recht mächtig, bei meinen Tests
hat er mir aber die option -Q ignoriert... aha ... ubuntu 22.04 hat
da noch die version 1.0.6 davon... Werd da noch weiterforschen,
weil die optionen laut
https://csvkit.readthedocs.io/en/latest/scripts/csvformat.html
ziemlich genau dem entsprechen, was ich mir von so einem tool
erhofft hätte. Vielleicht schreib ich es aber auch einfach in
tcl selber neu ;-)

Das xml2 (csv2 ... | 2csv ...) scheint nicht wirklich mit quoted csv
umgehen zu können, auch mit option -q \" nicht. Die in der manpage
angegebene online-doc ist mittlerweile ge404t, aber auch das webarchiv
davon https://web.archive.org/web/20160822100050/http://ofb.net/~egnor/xml2/ref
scheint zu csv nicht viel zu sagen...

Also Danke nochmal für den Hinweis auf csvtool und csvkit!

PS: meine Finger tippen auch oft cvs statt csv :-D
Hab auch immernoch oft mit cvs (dem VCS) zu tun.
0 new messages