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? wenn

    FS="\";\""
    

    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";"Martin

    Also 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)


Anmelden zum Antworten