GOOGLE ADS

Samstag, 16. April 2022

Ich bin neu in Shell-Scripting. Ich möchte Daten aus einer CSV-Datei lesen und in eine MySQL-Tabelle einfügen. Und drucken Sie die Nummer des in die Tabelle eingefügten Datensatzes

Geben Sie hier die Bildbeschreibung ein

Ich habe eine CSV-Datei wie hier angehängt.

Ich habe eine Tabelle mit einer Abfrage erstellt

CREATE TABLE testdb.employee (
emp_id INT(11) auto_increment NOT NULL,
full_name varchar(100) NOT NULL,
phone_no varchar(100) NOT NULL,
email varchar(200) NOT NULL,
hire_date DATE NOT NULL,
salary DOUBLE NOT NULL,
designation varchar(100) NOT NULL,
PRIMARY KEY (emp_id)
);

Ich möchte CSV-Daten in diese MySQL-Tabelle einfügen. Kann mir jemand helfen, ein Unix-Shell-Skript zu schreiben?


Lösung des Problems

Schritt 1: Lesen Sie die Überschrift

Sie müssen die allererste Zeile lesen und in kommagetrennte Werte umwandeln. Wenn Ihre CSV-Datei bereits durch Kommas getrennt ist, müssen Sie nur die erste Zeile lesen:

header=$(head -n 1 filename)

Wenn es mit einem anderen Zeichen getrennt ist, können Sie es wie explodieren

IFS=';' read -ra FIELDS <<< "$header"
for i in "${FIELDS[@]}"; do
# process "$i"
done

wo das Trennzeichen ist ;. Wenn Sie ein anderes Trennzeichen haben, ändern Sie es entsprechend. Nun, wenn Sie es explodieren müssten, dann können Sie es wie implodieren

IFS=,; echo "${FIELDS[*]}"

und Sie können das obige als Funktion verwenden.

Schritt 2: Lies jede Zeile

Sie müssen alle Zeilen ab der zweiten in einer Schleife lesen, bis Sie das Ende der Datei erreichen (siehe Schritt 1 und https://www.shell-tips.com/bash/how-to-parse-csv-file/ #gsc.tab=0 )

Schritt 3: Analysieren Sie Ihre Zeilen

Sie müssen sicherstellen, dass Sie alle Zellen richtig auswerten. Wenn sie also leer sind, ersetzen Sie ihren Wert entweder durch nulloder '', je nachdem, was Ihren Anforderungen besser entspricht. Sie müssen auch alle Apostrophe mit Escapezeichen versehen, um Codeumbrüche und SQL-Injektionen zu vermeiden, und Apostrophe um alle Textdaten wickeln. Das ist nicht so einfach, wie es klingt.

Schritt 4: Erstellen Sie Ihre Abfrage

Ihre Abfrage muss wie folgt aussehen

insert into yourtable(column1, column2, column3) values
('a', 'b', 'c'),
('d', 'e', 'f');

Ihr Header sollte bereits gut aussehen, aber Sie müssen insert into yourtableIhren Header voranstellen und umbrechen (). Außerdem müssen Sie Ihre Zeilen mit, trennen und alle Ihre Zeilen mit () umschließen und die Abfrage mit; ​​beenden.

Schritt 5: Ausführen
yourpassword | mysql -h yourhost -p -e"${yourquery}"

Ein Passwort in Ihrem Skript macht Ihr Skript jedoch zu einer sehr heiklen Datei, die Sie mit allen erforderlichen Mitteln schützen müssen.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...