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 ÜberschriftSie 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 ZeileSie 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 ZeilenSie müssen sicherstellen, dass Sie alle Zellen richtig auswerten. Wenn sie also leer sind, ersetzen Sie ihren Wert entweder durch null
oder ''
, 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.
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 yourtable
Ihren 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.
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