Datei einlesen und in MySQL speichern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von IGU|Schakal, 01.12.2008.

  1. #1 IGU|Schakal, 01.12.2008
    IGU|Schakal

    IGU|Schakal Grünschnabel

    Dabei seit:
    01.12.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo zusammen,
    heute brauche ich mal einen Kurs in Sachen Linuxscripting.

    Ich möchte folgendes realisieren:
    Wöchentlich erhalte ich eine Datei mit ca. 1000-4000 Zeilen. Diese Datei ist folgendermaßen aufgebaut:
    Code:
    test1 test2 test3
    test1 test2 test3
    test1 test2 test3
    ....
    
    Für mich interessant ist die 3. Spalte (Inhalt: "test3) jeder Zeile. Diese soll ausgelesen werden und in eine MySQL Tabelle geschrieben werden.
    Das Script soll unter Debian Etch laufen...


    Grüsse,
    Schakal
     
  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 bytepool, 01.12.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    http://tldp.org/LDP/abs/html/
    Ist ein ganz toller Kurs. ;)

    Aber ansonsten ist "cut" dein Freund (man cut fuer mehr infos), und such mal nach "while read" Konstruktionen, dann hast du eigentlich schon alles was du von der Skripting Seite her brauchst.
    Wie du mit deinem mysql client jetzt Datensaetze speichern kannst musst du selber rausfinden, aber "man mysql" koennte Aufschluss geben.

    mfg,
    bytepool
     
  4. #3 IGU|Schakal, 01.12.2008
    IGU|Schakal

    IGU|Schakal Grünschnabel

    Dabei seit:
    01.12.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Hi bytepool,
    so...sieht schon mal nicht schlecht aus:
    Code:
    cut -d" " -f3 /$src_dir/index.php | while
    
    Nun habe ich aber das Problem, dass ein ^M an der letzten Spalte hängt:
    Code:
    INSERT INTO test (id, grund) VALUES (null, test^M');
    
    Wie komme ich das noch weg?


    Viele Grüße,
    Schakal
     
  5. #4 bytepool, 01.12.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    lass mich raten: die Datei wird unter Windows erstellt, und du bearbeitest das ganze unter Unix? Schau dich mal nach dos2unix oder so um, also einfach ein Programm dass dir vorher noch die end of lines (eol's) umwandelt.

    mfg,
    bytepool
     
  6. #5 IGU|Schakal, 01.12.2008
    IGU|Schakal

    IGU|Schakal Grünschnabel

    Dabei seit:
    01.12.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Ob die Datei unter Windows erzeugt wird, weiß ich nicht. Ich lade die Datei nur runter... :-)

    Schaut jetz aber gut aus.. :-)
    Danke!


    Gruss,
    Schakal
     
  7. #6 bytepool, 01.12.2008
    Zuletzt bearbeitet: 01.12.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    im Allgemeinen sollte eine while read Konstruktion auch eher so aussehen:
    Code:
    while read line; do
       echo $line
    done < myfile.txt
    
    Also eine Pipe brauchst du eigentlich erstmal gar nicht. Aber stimmt schon, wenn man "while read" bei google eingibt kommen da teilweise schon komische Sachen bei raus. ;)

    edit:
    Wobei es in diesem Fall, wenn man eh nur cut benutzen will, wohl auch egal ist.

    mfg,
    bytepool
     
  8. #7 Wolfgang, 01.12.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    While read bearbeitet den Input nacht Trennzeichen, die in der variablen IFS vorgegeben sind.
    Code:
    while read var1 var2 var3 ;
    do
    echo "insert command $var3 ...".
    done <input
    
    Das sollte reichen

    Um das ganze Windowsgedöns rauszubekommen reicht ein :
    Code:
    sed -e 's/\r//' input >output
    
    Oder eben die sogenannten fertigen Tools wie dos2unix.

    Gruß Wolfgang
     
  9. #8 IGU|Schakal, 02.12.2008
    IGU|Schakal

    IGU|Schakal Grünschnabel

    Dabei seit:
    01.12.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Guten Morgen ihr Zwei,
    im Moment sieht mein Script so aus:
    Code:
    #!/bin/bash
    
    # Variablen
    src_dir="tmp"
    
    # MySQL Datebank leeren
    echo "TRUNCATE TABLE table;" >> /$src_dir/mysql_dump.sql
    
    # Aktuelle Cheaterliste downloaden
    cd /$src_dir/
    wget http://www.google.de
    dos2unix /$src_dir/index.txt
    
    cut -d" " -f3 /$src_dir/index.txt | while
            read line
            do
            echo "INSERT INTO table (id, name) VALUES (null, '$line');"  >> /$src_dir/mysql_dump.sql
    done
    
    mysql -u root -proot -B < /$src_dir/mysql_dump.sql
    
    # Files löschen
    rm /$src_dir/mysql_dump.sql
    rm /$src_dir/index.txt
    
    Was kann an diesem Script noch noch einfacher bzw. besser gemacht werden?
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 bytepool, 02.12.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    naja, einmal koenntest du Wolfgangs Tipp beachten, dass du cut gar nicht brauchst, das war mir auch mal wieder neu.
    Ansonsten wuerde ich die Pfad Variable minimal anders definieren. Wenn du schon in das tmp Verzeichnis wechselst, wuerde ich auch hinterher wieder in das Ausgangsverzeichnis zurueck wechseln. Wobei ich das wohl auch komplett ohne "cd" schreiben wuerde.
    Und mit ">>" haengst du Dinge nur an Dateien an, d.h. du willst beim ersten Mal vermutlich lieber ">" benutzen, das sollte sicherer sein falls die Dateien zufaellig schon bestehen sollten.

    Nach kurzem ueberfliegen wuerde ich jetzt das hier aus deinem Skript machen, ungetestet. Aber wie immer ist vieles davon auch einfach Geschmacksache.

    Code:
    #!/bin/bash
    
    # Variablen
    src_dir="/tmp"
    
    # MySQL Datebank leeren
    echo "TRUNCATE TABLE table;" > $src_dir/mysql_dump.tmp.sql
    
    # Aktuelle Cheaterliste downloaden
    wget http://www.google.de -O $src_dir/index.tmp.txt
    
    dos2unix $src_dir/index.tmp.txt
    
    while read var1 var2 var3; do
    	echo "INSERT INTO table (id, name) VALUES (null, '$var3');"  >> $src_dir/mysql_dump.tmp.sql
    done < $src_dir/index.tmp.txt
    
    mysql -u root -proot -B < $src_dir/mysql_dump.tmp.sql
    
    # Files löschen
    rm $src_dir/mysql_dump.tmp.sql
    rm $src_dir/index.tmp.txt
    
    mfg,
    bytepool
     
  12. #10 IGU|Schakal, 02.12.2008
    IGU|Schakal

    IGU|Schakal Grünschnabel

    Dabei seit:
    01.12.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Hi,
    vielen, vielen Dank. Jetzt sieht das schon übersichtlicher aus. :-)


    Gruss,
    Schakal
     
Thema:

Datei einlesen und in MySQL speichern

Die Seite wird geladen...

Datei einlesen und in MySQL speichern - Ähnliche Themen

  1. SED: Zu bearbeitende Dateien aus Textfile einlesen

    SED: Zu bearbeitende Dateien aus Textfile einlesen: Tag zusammen, entweder ich suche nach den falschen Stichworten, oder ich mache was falsch. Mein Problem : Mit dem Befehl grep -Rsl...
  2. Datei einlesen, veränder und ausgeben mit AWK

    Datei einlesen, veränder und ausgeben mit AWK: Hallo, Ich will eine Datei, in der eine Literaturliste steht mit Hilfe von AWK Zeile für Zeile einlesen, dann die Datei so verändern, dass zB....
  3. Schleife zum einlesen vieler Dateien funktioniert nicht

    Schleife zum einlesen vieler Dateien funktioniert nicht: [gelöst] Schleife zum einlesen vieler Dateien funktioniert nicht Hallo Leute, ich habe ein kleines Problem. Mein Script zerlegt eine große...
  4. Datei in shellscript Zeilenweise einlesen

    Datei in shellscript Zeilenweise einlesen: Eine Frage an die Linux-Gemeinde: Wie kann ich in einem Bash-Script eine Datei Zeilenweise einlesen und das Ergebnis als Parameter übergeben...
  5. Problem beim Einlesen von Pfaden mit Leerzeichen aus Textdatei

    Problem beim Einlesen von Pfaden mit Leerzeichen aus Textdatei: Wünsche einen schönen Sonntag :) Ich habe eine Textdatei angelegt und dort Datei- und Verzeichnispfade hineingeschrieben (eine Zeile = ein...