CSV Separator aus Feld entfernen
-
Hallo
ich habe folgendes Problem:
Eine CSV Datei (Separator ; ) in der die Felder mit " begrenzt sind enthält in dem einen oder anderen Feld auch noch ein ; was eben kein Separator ist.Ich möchte die Datei eigentlich mit gawk/awk bearbeiten gebe da ; als FS an und dann springt es mir natürlich an den "falschen" ; in die falsche Spalte.
Mit welchem tool kann ich vorher einfach alle ; in einem Feld entfernen?
Das ganze hätte ich gerne als Kommandozeile für Linux (Suse)
Ich kann die CSV Datei natürlich auch mit einem CSV-Editor öffnen und dann die ; ersetzen, aber ich will das nicht händlisch machen, weil es zu viele Dateien sind bzw. werden.
jenz
-
also wenn ich cvs files speichern lass - dann immer ";" als trenner, nicht das ; allein
ist es bei dir evtl auch so der fall, oder hast du wirklich nur das ; zeichen ?am sonsten wuesste ich keine moeglichkeit zu wissen welches ein echtes und welches nicht ist
auch wenn du die anzahl kennst, woher soll irgend etwas wissen welches das richtige ist und welches nicht {o;
-
Hallo
ja, die Felder haben ja ein " drumherum, daran kann man das ja auch erkennen, ob es ein richtiges ist oder nicht.
Aber dadurch ist der Trenner nicht ";".
Eine Datei sieht zum Beispiel so aus:
"Nummer";"Bemerkung";"Name";"Vorname"
"101";"Test";"Ich";"DU"
"102";"doofe bemerkung;";"Müller";"Martin"Die erste Zeile enthält also die Header, kein Problem.
Die zweite Zeile ist auch in Ordnung.
Die dritte hat in der Bemerkung eben ein ; und das ist für gawk das Problem, da kommt es dann durcheinander.jenz
-
also wenn du das so in excel eingibst und sagst das ";" der trenner ist - laeuft alles perfekt - seh da keine probleme
-
ja mr. evil, du hast recht. das ist eine wunderbare csv datei. die ist auch vollkommen in ordnung.
nur gawk/awk kommt damit nicht zurecht und das möchte ich aber benutzen.
bzw. brauche ich das.
-
achso
(hab n bissl danach gegoogled #gg)
seh ich das richtig, FS kann nur ein zeichen sein? wennFS="\";\""
moeglich ist waere das natuerlich praktisch - am sonsten bietet sich doch ein
FS="\""
an, und ; strings werden dann einfach uebersprungen ?!
BEGIN { FS="\"" } { for (i=1; i<=NF; ++i) { if ($(i) != ";") printf "%s\n", $(i) } }
der code ist nur geraten nach kurzem googlen, hab awk noch nie gemacht
-
also wenn ich cvs files speichern lass - dann immer ";" als trenner, nicht das ; allein
Keine blöde Idee.
-
Hallo Mr Evil
mehrere Zeichen schein FS nicht zu akzeptieren. Wenigstens hat es nicht geklappt.
Ich habe die Datei jetzt erstmal in einem Excel von den Semikolons befreit. Das ist aber keine Dauerlösung.Hoffentlich weiß noch jemand Rat.
Und zu ";" als Trenner möchte ich auch mal was sagen...
Das kann ja auch net so ganz richtig sein, die Beispiel Daten von vorhin sähen dann so aus:
Nummer";"Bemerkung";"Name";"Vorname
101";"Test";"Ich";"DU
102";"doofe bemerkung;";"Müller";"MartinAlso ohne führendes und letztes ".
Es ist eben ; der Trenner und " schließt ein Feld ein.
Oder habe ich jetzt was übersehen.
jenz
-
Also ohne führendes und letztes ".
Ja, aber die kann man sehr leicht nachher dazumachen.
(Wirklich keine blöde Idee)