Hallo,
ich benötige zum Einlesen von Messwerten ein Skript, welches mehrere csv-Dateien in die lokale MySQL-DB importieren kann. Die Dateien werden dabei durch weitere Skripte bereits vorformatiert und teilweise werden die Dateinamen angepasst.
Die Dateinamen sehen wie folgt aus:
Stromschiene 1_Avg_2016-03-08.csv Stromschiene 2_Avg_2016-03-10.csv ...
Die CSV-Dateien selbst haben folgenden Aufbau
2016-04-08T00:04:01,50020,23243,23248,23274,97889,83145,106857,951,63188,20627, 2016-04-08T00:03:00,50030,23244,23259,23281,97765,83452,106734,951,63220,20614, 2016-04-08T00:02:00,50030,23228,23231,23252,98144,83079,106656,951,63178,20486, 2016-04-08T00:01:00,50040,23246,23249,23274,97967,83100,106803,951,63207,20569, 2016-04-08T00:00:00,50040,23251,23251,23285,97999,83202,107063,951,63283,20681, ...
Und zu guter Letzt das Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #! /bin/bash # ausgeführte Befehle anzeigen set -x # Daten der DB-Anbindung _db="xxx" _db_user="yyy" _db_password="zzz" # Verzeichnis in dem die Dateien liegen _csv_directory="/srv/ftp/test" # ins Verzeichnis wechseln cd $_csv_directory for f in *.csv do # Tabellennamen aus Dateinamen bilden a=`echo ${f##*/}` _table_name=`echo ${a%_*}` # CSV nach MySQL importieren mysql -e "LOAD DATA LOCAL INFILE '"$f"' INTO TABLE '"$_table_name"' " --user=$_db_user --password=$_db_password $_db done exit 0 |
Nun muss ich aus dem Dateinamen jeder einzelnen CSV-Datei auf den Namen der Tabelle in der Datenbank kommen. Dies geschieht in Zeile 20 und 21. Aus diesen Daten versuche ich den mysql-Befehl zu bilden. Dies schlägt leider fehl.
Hier die Ausgabe aus der Konsole:
+ for f in '*.csv' ++ echo Stromschiene 2_Avg_2016-03-10.csv + a='Stromschiene 2_Avg_2016-03-10.csv' ++ echo Stromschiene 2_Avg + _table_name='Stromschiene 2_Avg' + mysql -e 'LOAD DATA LOCAL INFILE '\''Stromschiene' '2_Avg_2016-03-10.csv'\'' INTO TABLE '\''Stromschiene' '2_Avg'\'' ' --user=yyy --password=zzz xxx mysql Ver 14.14 Distrib 5.5.47, for debian-linux-gnu (x86_64) using readline 6.3 Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Usage: mysql [OPTIONS] [database] -?, --help Display this help and exit. -I, --help Synonym for -? ...
Da ich an dieser Stelle mit meinem Latein am Ende bin, würde ich mich über Hilfe sehr freuen.
Viele Grüße elecsun