Auslesen einer Textdatei und einzelne Wöter einer Variable zuweisen um Sie in Mysql zu senden
Hallo zusammen, vielleicht gibt es hier einen der mir helfen kann. Folgendes, ich habe eine Textdatei Inhalt: Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a Jun 28 20:01:32 00-12-f0-02-1d-3a Jun 28 20:03:21 00-12-f0-02-1d-3a Jun 28 20:17:19 00-12-f0-02-1d-3a Jun 28 20:18:23 00-12-f0-02-1d-3a Jun 28 22:22:56 00-12-f0-02-1d-3a Jun 29 15:27:21 00-12-f0-02-1d-3a Jun 29 15:32:44 00-12-f0-02-1d-3a Jun 29 15:33:20 00-12-f0-02-1d-3a Jun 29 15:36:24 00-12-f0-02-1d-3a Jun 29 15:36:59 00-12-f0-02-1d-3a Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll. Datenbank: Datum, Monat, Tag, Zeit, Mac Vielen Dank Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art: <?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?> Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten. Daniel -- Daniel Bauer photographer Basel Barcelona professional photography: http://www.daniel-bauer.com erotic art photos: http://www.bauer-nudes.com Madagascar special: http://www.fotograf-basel.ch/madagascar/ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
perl foo.pl < test INSERT INTO table (month, day, time, mac) VALUES ("Jun","28","18:23:59","00-12-f0-02-1d-3a"); [...] Das kannst du dann mit phpmyadmin oder dem mysql-CLI oder sonstwas weiterverarbeiten. Gruss, Christian. --foo.pl-- while(<>) { chomp; print "INSERT INTO table ", "(month, day, time, mac) ", "VALUES (", join(",", map {'"'.$_.'"'} (split(/ /))), ");\n"; } -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Daniel Bauer schrieb:
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art:
<?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?>
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
Daniel
Hallo zusammen, gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten? -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Dienstag 14 Juli 2009 schrieb Hans_B:
Daniel Bauer schrieb:
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art:
<?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?>
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
Daniel
Hallo zusammen,
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
Hi, nur bash wird wohl etwas komplizierter, aber awk kann die Daten zu SQL-Befehlen umschnitzen und dann kannst Du das SQL-file auf der Kommandozeile in die Datenbank einlesen, z.B. % awk '{print "INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3,\ $4);"}' test-file >test.sql % mysql -u user -h host -D db-name < test.sql (Passwortabfrage) fertig. Mit Kommata und anderen Satzzeichen vielleicht noch etwas experimentieren, ist als reine Trockenübung sicher noch was nicht ganz gar. Viel Vergnügen Christoph --
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- << -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Christoph Hanslik schrieb:
Am Dienstag 14 Juli 2009 schrieb Hans_B:
Daniel Bauer schrieb:
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art:
<?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?>
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
Daniel
Hallo zusammen,
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
Hi, nur bash wird wohl etwas komplizierter, aber awk kann die Daten zu SQL-Befehlen umschnitzen und dann kannst Du das SQL-file auf der Kommandozeile in die Datenbank einlesen, z.B.
% awk '{print "INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3,\ $4);"}' test-file >test.sql
% mysql -u user -h host -D db-name < test.sql (Passwortabfrage)
fertig. Mit Kommata und anderen Satzzeichen vielleicht noch etwas experimentieren, ist als reine Trockenübung sicher noch was nicht ganz gar.
Viel Vergnügen
Christoph
Vielen Dank das werde ich mal testen und melde mich wieder....ich hoffe es klappt. Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Christoph Hanslik schrieb:
Am Dienstag 14 Juli 2009 schrieb Hans_B:
Daniel Bauer schrieb:
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art:
<?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?>
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
Daniel
Hallo zusammen,
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
Hi, nur bash wird wohl etwas komplizierter, aber awk kann die Daten zu SQL-Befehlen umschnitzen und dann kannst Du das SQL-file auf der Kommandozeile in die Datenbank einlesen, z.B.
% awk '{print "INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3,\ $4);"}' test-file >test.sql
% mysql -u user -h host -D db-name < test.sql (Passwortabfrage)
fertig. Mit Kommata und anderen Satzzeichen vielleicht noch etwas experimentieren, ist als reine Trockenübung sicher noch was nicht ganz gar.
Viel Vergnügen
Christoph
Hallo Christoph, habe es nun getestet, nach dem ich den Aufruf des scripts mache bringt er mir die Hilfe con mysql. Ist es korrekt das er mir die in der Datei .sql dann die Zeilen stehen INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3, $4); müsste dort nicht drin stehen INSERT INTO table (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a) VALUES ($1, $2, $3, $4); oder irre ich mich da? Danke schon mal im vorraus.... Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo,
Ist es korrekt das er mir die in der Datei .sql dann die Zeilen stehen
INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3, $4); Ja.
müsste dort nicht drin stehen
INSERT INTO table (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a) VALUES ($1, $2, $3, $4);
Nein. In der ersten Klammer werden die Felder definiert, die beschrieben werden sollen. Sollen alle Felder in der richtigen Reihenfolge beschrieben werden, könnte man die einzelne Auflistung auch weglassen. In der zweiten Klammer stehen dann die Werte als Variablen. "$1" erhält also den Wert "Jun", der geschrieben wird in das Feld "month". Würdest Du nur einen Eintrag machen wollen, könntest Du die Variablen hinter VALUES gegen den tatsächlichen Wert austauschen.
oder irre ich mich da?
Yepp. :)
Danke schon mal im vorraus....
Gruß Hans
-- gruß Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Oliver schrieb:
Hallo,
Ist es korrekt das er mir die in der Datei .sql dann die Zeilen stehen
INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3, $4);
Ja.
müsste dort nicht drin stehen
INSERT INTO table (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a) VALUES ($1, $2, $3, $4);
Nein. In der ersten Klammer werden die Felder definiert, die beschrieben werden sollen. Sollen alle Felder in der richtigen Reihenfolge beschrieben werden, könnte man die einzelne Auflistung auch weglassen. In der zweiten Klammer stehen dann die Werte als Variablen. "$1" erhält also den Wert "Jun", der geschrieben wird in das Feld "month". Würdest Du nur einen Eintrag machen wollen, könntest Du die Variablen hinter VALUES gegen den tatsächlichen Wert austauschen.
oder irre ich mich da?
Yepp. :)
Danke schon mal im vorraus....
Gruß Hans
Guten Morgen Oliver, gut dann ist das ja schon mal korrekt, aber warum bringt er mir die Hilfe ? Wo könnte der Fehler liegen? Ich verzweifle hier noch... Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Hans, Am Mittwoch, 15. Juli 2009 schrieb Hans_B:
gut dann ist das ja schon mal korrekt, aber warum bringt er mir die Hilfe ?
Wo könnte der Fehler liegen? Wenn Du die Daten bereits in einem verwertbaren Format in einer Datei hast, brauchst Du die Datei nicht noch einmal lesen. Es ist möglich, diese Datei mit mysql mittels LOAD DATA direkt einzulesen. Ich schaue mal nach und melde mich wieder.
Die Hilfe wird aller wahrscheinlickeit nach deshalb angezeigt, weil die Syntax falsch ist. Das erledigt sich aber von selbst, wenn Du die Datei direkt nach mysql einliest und nicht über den Umweg sie mittels bash auszulesen.
Ich verzweifle hier noch...
Gruß Hans
-- gruß Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Hans,
Ich verzweifle hier noch... Die Syntax lautet: LOAD DATA [optionen] INFILE 'dateiname' INTO TABLE tabelle.
Das könntest Du so aus mysql heraus einlesen, vorausgesetzt, die Datei befindet sich im Ordner der DB. Ansonsten den Pfad beim Dateinamen mit angeben. Du kannst aber auch das Programm mysqlimport verwenden um die Datei einzulesen: mysqlimport [parameter] datenbankname tabellenname.txt "tabellenname.txt" beihaltet Deine Daten die Du einlesen willst, enthält aber den Namen der Tabelle aus der angegebenen DB, in die Du schreiben willst. Mit dem Parameter "--fields-enclosed-by=..." gibst Du an, welche Trennung der Felder in der Datei existert.
Gruß Hans
-- gruß Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 15 Jul 2009, Oliver schrieb:
Ist es korrekt das er mir die in der Datei .sql dann die Zeilen stehen
INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3, $4); Ja.
Nein. Die $1 .. $4 hätten von awk durch die jew. Inhalte der Felder ersetzt werden müssen. Beim Lösungsvorschlag sehe ich da auch keinen Fehler beim Quoting und muß daher annehmen, daß Hans da beim übernehmen was falsch gemacht hat. Halt, doch, den, den auch Christoph bemerkt hat.
müsste dort nicht drin stehen
INSERT INTO table (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a) VALUES ($1, $2, $3, $4); Nein.
Da müßte stehen: INSERT INTO table (month, day, time, mac) \ VALUES ("Jun", "28", "18:23:59", "00-12-f0-02-1d-3a"); (oder mit '' statt "" um die Werte ("Values")). HTH, -dnh -- Dr. Daniel Jackson: Well, it's not like we haven't defied orders before. Major Samantha Carter: Well, yeah, but that was to save Earth. Colonel Jack O'Neill: Earth. Steaks. There's a difference? -- Stargate SG-1, 4x03 - Upgrades -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch 15 Juli 2009 schrieb Hans_B:
Christoph Hanslik schrieb:
Am Dienstag 14 Juli 2009 schrieb Hans_B:
Daniel Bauer schrieb:
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art:
<?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?>
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
Daniel
Hallo zusammen,
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
Hi, nur bash wird wohl etwas komplizierter, aber awk kann die Daten zu SQL-Befehlen umschnitzen und dann kannst Du das SQL-file auf der Kommandozeile in die Datenbank einlesen, z.B.
% awk '{print "INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3,\ $4);"}' test-file >test.sql
% mysql -u user -h host -D db-name < test.sql (Passwortabfrage)
fertig. Mit Kommata und anderen Satzzeichen vielleicht noch etwas experimentieren, ist als reine Trockenübung sicher noch was nicht ganz gar.
Viel Vergnügen
Christoph
Hallo Christoph,
habe es nun getestet, nach dem ich den Aufruf des scripts mache bringt er mir die Hilfe con mysql.
Ist es korrekt das er mir die in der Datei .sql dann die Zeilen stehen
INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3, $4);
müsste dort nicht drin stehen
INSERT INTO table (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a) VALUES ($1, $2, $3, $4);
oder irre ich mich da?
Danke schon mal im vorraus....
Gruß Hans
Hi Hans_B, am awk-Befehl ist was faul: Die $1-$4 müssen ausquotiert werden. Also lautet der Befehl: % awk '{print"INSERT INTO table (month, day, time, mac) VALUES \ ("$1", "$2", "$3", "$4");"}' test >test.sql Ergebnis Deiner Testzeilen: % cat test.sql INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 18:33:14, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:01:32, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:03:21, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:17:19, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:18:23, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 22:22:56, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:27:21, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:32:44, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:33:20, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:36:24, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:36:59, 00-12-f0-02-1d-3a); (Zeilenumbruch von KMail) Das sollte SQL verstehen können. Aber die Lösung von David Haller sieht ja viel eleganter aus (wenn sie geht ...) Viel Erfolg Christoph --
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- << -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch 15 Juli 2009 schrieb Christoph Hanslik:
Am Mittwoch 15 Juli 2009 schrieb Hans_B:
Christoph Hanslik schrieb:
Am Dienstag 14 Juli 2009 schrieb Hans_B:
Daniel Bauer schrieb:
On Tuesday 14 July 2009 16:49:38, Hans_B wrote:
Folgendes, ich habe eine Textdatei Inhalt:
Jun 28 18:23:59 00-12-f0-02-1d-3a Jun 28 18:33:14 00-12-f0-02-1d-3a ...
Diese Daten möchte ich nu in die Mysql Datenbank senden. Wobei jede Zeile einen Eintrag in die Datenbank darstellen soll.
Ich würde das mit einem php-script machen. So in der Art:
<?php $in = fopen ("datei.txt", "r"); while (!feof($in)) { $zeile = fgets($in); $felder=explode(" ", $zeile); $resultat=mysql_query("INSERT INTO tabelle SET feld0='$felder[0]', feld1='$felder[1]', ... "); } ... ?>
Es gibt sicher unzählige andere, wahrscheinlich simplere Möglichkeiten.
Daniel
Hallo zusammen,
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
Hi, nur bash wird wohl etwas komplizierter, aber awk kann die Daten zu SQL-Befehlen umschnitzen und dann kannst Du das SQL-file auf der Kommandozeile in die Datenbank einlesen, z.B.
% awk '{print "INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3,\ $4);"}' test-file >test.sql
% mysql -u user -h host -D db-name < test.sql (Passwortabfrage)
fertig. Mit Kommata und anderen Satzzeichen vielleicht noch etwas experimentieren, ist als reine Trockenübung sicher noch was nicht ganz gar.
Viel Vergnügen
Christoph
Hallo Christoph,
habe es nun getestet, nach dem ich den Aufruf des scripts mache bringt er mir die Hilfe con mysql.
Ist es korrekt das er mir die in der Datei .sql dann die Zeilen stehen
INSERT INTO table (month, day, time, mac) VALUES ($1, $2, $3, $4);
müsste dort nicht drin stehen
INSERT INTO table (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a) VALUES ($1, $2, $3, $4);
oder irre ich mich da?
Danke schon mal im vorraus....
Gruß Hans
Hi Hans_B,
am awk-Befehl ist was faul: Die $1-$4 müssen ausquotiert werden. Also lautet der Befehl: % awk '{print"INSERT INTO table (month, day, time, mac) VALUES \ ("$1", "$2", "$3", "$4");"}' test >test.sql
Ergebnis Deiner Testzeilen: % cat test.sql INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 18:23:59, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 18:33:14, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:01:32, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:03:21, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:17:19, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 20:18:23, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 28, 22:22:56, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:27:21, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:32:44, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:33:20, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:36:24, 00-12-f0-02-1d-3a); INSERT INTO table (month, day, time, mac) VALUES (Jun, 29, 15:36:59, 00-12-f0-02-1d-3a);
(Zeilenumbruch von KMail) Das sollte SQL verstehen können.
Aber die Lösung von David Haller sieht ja viel eleganter aus (wenn sie geht ...)
Viel Erfolg
Christoph
Nochn Fehler: die VALUES müssen gequotet sein. % awk '{print"INSERT INTO table (month, day, time, mac) VALUES (\""$1"\", \ \""$2"\", \""$3"\", \""$4"\");"}' test >test.sql Da kommt Freude auf! Grüße Christoph
--
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- <<
--
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- << -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 15 Jul 2009, Christoph Hanslik schrieb:
Am Mittwoch 15 Juli 2009 schrieb Christoph Hanslik: [..]
Christoph, das mit dem Quoten (zitiere nur das, was für deine Antwort / Ergänzung relevant ist) üben wir aber nochmal, ja? ;)
Nochn Fehler: die VALUES müssen gequotet sein.
% awk '{print"INSERT INTO table (month, day, time, mac) VALUES (\""$1"\", \ \""$2"\", \""$3"\", \""$4"\");"}' test >test.sql
Da kommt Freude auf!
Och, wenn man öfter awk verwendet gewöhnt man sich dran -- und/oder packt eh gleich das komplette bisherige (ba)sh-Script in ein awk-script. Und wenn das doch zu umständlich wird greift man (ich) eh zu perl und DBD/DBI, da kann man dann auch mit prepared-Statements arbeiten und das ganze DB-Geraffel ist tendenziell performanter und sicherer als diese ganzen einzelnen Statements. Und einfach auf eine andere DB portierbar (IIRC mehr oder weniger bis auf das ->connect() ist weitgehend alles abstrahiert, im Rahmen dessen, was die jew. "DB" (bis zum CSV-flat-file) darunter kann). BTW: ich hab hier ein paar sh und perl (awk kann auch dabei sein ;) Scripte, die aus DB-Abfragen LaTeX-Code generieren und daraus dann mittels pdflatex saubere (und ggfs. mit klickbaren Seitenzahlen im Inhaltsverzeichnis versehene) PDF Dateien generieren ... Ich mag awk! Hab auch sonst schon mit awk das ein oder andere schnuckelige programmiert ;) -dnh -- "Two of my imaginary friends reproduced once ... with negative results." float@interport.net (void) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
David Haller schrieb:
Hallo,
Am Mit, 15 Jul 2009, Christoph Hanslik schrieb:
Am Mittwoch 15 Juli 2009 schrieb Christoph Hanslik:
[..]
Christoph, das mit dem Quoten (zitiere nur das, was für deine Antwort / Ergänzung relevant ist) üben wir aber nochmal, ja? ;)
Nochn Fehler: die VALUES müssen gequotet sein.
% awk '{print"INSERT INTO table (month, day, time, mac) VALUES (\""$1"\", \ \""$2"\", \""$3"\", \""$4"\");"}' test >test.sql
Da kommt Freude auf!
Och, wenn man öfter awk verwendet gewöhnt man sich dran -- und/oder packt eh gleich das komplette bisherige (ba)sh-Script in ein awk-script. Und wenn das doch zu umständlich wird greift man (ich) eh zu perl und DBD/DBI, da kann man dann auch mit prepared-Statements arbeiten und das ganze DB-Geraffel ist tendenziell performanter und sicherer als diese ganzen einzelnen Statements. Und einfach auf eine andere DB portierbar (IIRC mehr oder weniger bis auf das ->connect() ist weitgehend alles abstrahiert, im Rahmen dessen, was die jew. "DB" (bis zum CSV-flat-file) darunter kann).
BTW: ich hab hier ein paar sh und perl (awk kann auch dabei sein ;) Scripte, die aus DB-Abfragen LaTeX-Code generieren und daraus dann mittels pdflatex saubere (und ggfs. mit klickbaren Seitenzahlen im Inhaltsverzeichnis versehene) PDF Dateien generieren ... Ich mag awk!
Hab auch sonst schon mit awk das ein oder andere schnuckelige programmiert ;)
-dnh
Hallo noch mal, also das mit awk klappt nun so wie Ihr es geschrieben habt, die Datei .sql schaut nun auch so aus nur übernimmt er es nicht in die Datenbank. Immer noch kommt die mysql Hilfe...... Ist aber interessant was mit awk alles zu machen ist. Ich danke Euch für Eure so klasse Hilfe....einfach Super Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch 15 Juli 2009 schrieb Hans_B: [...]
Hallo noch mal,
also das mit awk klappt nun so wie Ihr es geschrieben habt, die Datei .sql schaut nun auch so aus nur übernimmt er es nicht in die Datenbank. Immer noch kommt die mysql Hilfe......
Ist aber interessant was mit awk alles zu machen ist.
Ich danke Euch für Eure so klasse Hilfe....einfach Super
Gruß Hans
Hi Hans, jetzt müßte es ein SQL Problem sein: Möglicherweise - User nicht angelegt, DB mysql Table user - die Zugriffsrechte jedes mysql-Users werden individuell verwaltet - in der DB mysql Table db werden bestimmte user mit bestimmten Datenbanken verbunden - Table noch nicht angelegt - Datenbank noch nicht angelegt - Port auf dem MySQL-Server in Firewall gesperrt (3306 oder so) mehr fällt mir gerade nicht ein. Ich hoffe es hilft ... Grüße Christoph --
-- hanslik bei hanslux.de -- << -- http://www.hanslux.de -- << -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch 15 Juli 2009 schrieb Christoph Hanslik:
[..]
Christoph, das mit dem Quoten (zitiere nur das, was für deine Antwort / Ergänzung relevant ist) üben wir aber nochmal, ja? ;)
Nochn Fehler: die VALUES müssen gequotet sein.
% awk '{print"INSERT INTO table (month, day, time, mac) VALUES (\""$1"\", \ \""$2"\", \""$3"\", \""$4"\");"}' test >test.sql
Da kommt Freude auf!
Ich noch mal, danke an Euch alle die mir geholfen haben, es klappt nun einwandfrei. Kann mich ja gar nicht richtig bedanken bei Euch. Bin begeistert was man so alles machen kann mit awk und bash Scripte überhaupt. Kennt einer von Euch ein gutes Buch aus welchem man so was lernen kann? Nochmals vielen vielen Dank an alle.... Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Die, 14 Jul 2009, Hans_B schrieb:
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
==== UNGETESTET!!! ==== while read -r m d t M; do \ echo "INSERT INTO table (month, day, time, mac) \ VALUES ( '$m', '$d', '$t', '$M' );" ; done < DATEI | mysql -uMeinDBuser -p ==== -dnh -- Q: "Excession is particularly popular because of its copious detail concerning the Ships and Minds of the Culture, its great AIs: their outrageous names, their dangerous senses of humour. Is this what gods would actually be like?" A: "If we're lucky." -- Iain M. Banks -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
David Haller schrieb:
Hallo,
Am Die, 14 Jul 2009, Hans_B schrieb:
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
==== UNGETESTET!!! ==== while read -r m d t M; do \ echo "INSERT INTO table (month, day, time, mac) \ VALUES ( '$m', '$d', '$t', '$M' );" ; done < DATEI | mysql -uMeinDBuser -p ====
-dnh
Guten Morgen David, habe es mal versucht, aber bekomme nen sysntax error near unexpected token `done' Hast Du vielleicht ne Idee? Gruß Hans -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 15 Jul 2009, Hans_B schrieb:
David Haller schrieb:
Am Die, 14 Jul 2009, Hans_B schrieb:
gibt es keine Möglichkeit das direkt mit Bash Script umzusetzten?
==== UNGETESTET!!! ==== while read -r m d t M; do \ echo "INSERT INTO table (month, day, time, mac) \ VALUES ( '$m', '$d', '$t', '$M' );" ; done < DATEI | mysql -uMeinDBuser -p ====
habe es mal versucht, aber bekomme nen sysntax error near unexpected token `done' Hast Du vielleicht ne Idee?
Da ist nur ein '\' verlorengegangen. Wenn du das ergänzt oder in eine script-Datei packst sollte es gehen. Achso, statt dem 'echo' ist ein printf sinnvoll: ...; do \ printf "INSERT INTO table (month, day, time, mac)\ VALUES ( '%s', '%i', '%s', '%s' );\n"\ "$m" "$d" "$t" "$M";\ done < ... Bzgl. dem SQL-Kram hab ich das jetzt aber nicht kontrolliert / getestet. HTH, -dnh -- The Universe -- some information to help you live in it. 6 ARTS: None. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (6)
-
Christian Berendt
-
Christoph Hanslik
-
Daniel Bauer
-
David Haller
-
Hans_B
-
Oliver