Text(Fixed Length) in MySql importieren

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von JCB, 20.04.2006.

  1. #1 JCB, 20.04.2006
    Zuletzt bearbeitet: 14.07.2006
    JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    Aufgewärmt: Text(Fixed Length) in MySql importieren

    Moin,
    ich hoffe, das ist die richtige abteilung. Ich möchte eine Textdatei mit fester Feldlänge mittels AWK in eine MySQL Datenbank importieren. Dazu habe ich folgende Zeile geschrieben:
    Code:
    awk 'BEGIN{FIELDWIDTHS="10 9 90 64 64 30 30 9 2 16 5 16 200 1"};{print "INPUT INTO Master_DB (UID,C_D,C_Name1,C_Name2,C_Address1,C_Address2,C_City) VALUES(\""$1"\",\""$2"\",\""\$3"\",\""\$4"\",\""\$5"\",\""\$6"\",\""\$7"\")"}' input.txt | mysql -u jcb --password=geheim dbname
    
    leider bekomme ich jedesmal die Fehlermeldung, daß Backslash nicht das letzte Zeichen auf der Zeile ist? Wo soll da noch ein Backslash rein??

    Kennt sich da jemand aus??

    Danke,

    JCB
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 ninguno, 21.04.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    das sql statement muss aber wohl insert into statt input into heissen.
    und wie lautet die fehlermeldung genau? kommt die von der shell oder von mysql?
     
  4. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    @ninguno

    Ok du hast Recht. Hab ich jetzt geändert. jedoch ist die Meldung gleich. Ich denke daß es dann ein awk Fehler ist:
    Code:
    awk: BEGIN{FIELDWIDTHS="10 9 90 64 64 30 30 9 2 16 5 16 200 1"};{print "INSERT INTO Master_DB (UID,C_D,C_Name1,C_Name2,C_Address1,C_Address2,C_City) VALUES(\""$1"\",\""$2"\",\""\$3"\",\""\$4"\",\""\$5"\",\""\$6"\",\""\$7"\")"}
    awk:                                                                                                                                                                                ^ Backslash ist nicht letztes Zeichen auf der Zeile.
    
    Der MySql Teil wird bei dieser Fehlermeldung noch nicht behandelt.

    Irgendeine Idee?

    Danke,

    JCB
     
  5. #4 Schlaubi_fi.de, 21.04.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    falsch:
    Code:
    awk 'BEGIN{FIELDWIDTHS="10 9 90 64 64 30 30 9 2 16 5 16 200 1"};{print "INPUT INTO Master_DB (UID,C_D,C_Name1,C_Name2,C_Address1,C_Address2,C_City) VALUES(\""$1"\",\""$2"\",\""\$3"\",\""\$4"\",\""\$5"\",\""\$6"\",\""\$7"\")"}' input.txt | mysql -u jcb --password=geheim dbname
    richtig:
    Code:
     awk 'BEGIN{FIELDWIDTHS="10 9 90 64 64 30 30 9 2 16 5 16 200 1"};{print "INSERT INTO Master_DB (UID,C_D,C_Name1,C_Name2,C_Address1,C_Address2,C_City) VALUES(\""$1"\",\""$2"\",\""$3"\",\""$4"\",\""$5"\",\""$6"\",\""$7"\")"}' input.txt | mysql -u jcb --password=geheim dbname
    
    Der Unterschied:
    Du hast bei Deinem awk ab $3 bis $7 plötzlich angefangen Backslashes vor das $-Zeichen zu schreiben...warum auch immer :D - lass sie weg und es sollte funktionuckeln... :D :D :D
     
  6. #5 JCB, 21.04.2006
    Zuletzt bearbeitet: 27.04.2006
    JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    @Schlaubi

    *verneig* Weiss auch nicht was mich da geritten hat:think:

    Ich versuch das mal,

    Danke für den Tipp

    JCB

    [edit]
    das wars, danke für eure Hilfe

    [/edit]
     
  7. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    Hallo,

    da dieser Befehl nur in der bash ausgeschrieben funktioniert (das aber sauber) benötige ich einen kurzen Tip, wie ich ihn in ein Script integrieren kann. Leider gibt die Suche nicht so viel über Quotations her.

    Ein Versuch war e sin Backticks zu setzen
    Code:
    for file in ${folder[*]}; do
    
    #Importieren
    imp= `awk 'BEGIN{FIELDWIDTHS="10 9 90 64 64 30 30 9 2 16 5 16 200 1"};
    {print "INSERT INTO TEMP_MST (UID, C_DUNS, C_Name1, C_Address1, C_Address2, C_City, C_State, C_Postcode, C_Country,C_Phone,C_NationalRegisterType, C_NationalRegisterNumber, C_Comment,C_Type) 
    VALUES(\""$1"\",\""$2"\",\""$3"\",\""$4"\",\""$5"\",\""$6"\",\""$7"\",\""$8"\",\""$9"\",\""$10"\",\""$11"\",\""$12"\",\""$13"\",\""$14"\");"}' 
    $file`
    
    echo $imp | mysql  -u root --password=geheim datenbank
    
    
    leider bringt mir das nur ein
    Code:
    /usr/local/bin/readincmd.sh: line 19: INSERT: command not found
    
    Habt ihr da eine Idee?

    Vielen Dank für einen Tipp,

    JCB

    PS: die Zeilenumbrüche sind nur der lesbarkeit halber drin :)
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 phrenicus, 15.07.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    Hallo,

    die Zeilenumrüche bei der Zuweisung sind keine so gute Idee. awk beschwert sich da über einen unvollendeten String.
    Außerdem würde ich bei der Variablenzuweisung das Leerzeichen nach dem = weglassen:

    Falsch: imp= `irgendwas...`
    Richtig: imp=`irgendwas...`

    Gruß
     
  10. #8 Schlaubi_fi.de, 15.07.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Moin,

    ich stimme phrenicus zu...Du kannst ja mal das | mysql ... weglassen und nur einen echo des
    mit-awk-zusammengestupfelten-INSERT-Befehls machen,
    dann siehst Du, was du dem mysql vorschmeißt :D
     
Thema:

Text(Fixed Length) in MySql importieren