GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie füge ich CSV-Daten über eine Shell-Pipe in eine Sqlite-Tabelle ein?

Ich habe ein Programm geschrieben, das das Ergebnis in reiner CSV-Form an die Standardausgabe ausgibt (jede Zeile stellt einen einzelnen Datensatz dar und enthält denselben Satz von durch Kommas getrennten Feldern, Felder enthalten nur englische Kleinbuchstaben, Zahlen und Punkte, keine Leerzeichen, keine Anführungszeichen und keine Symbole, die eventuell maskiert/kodiert werden müssen).

Wie leite ich diese Ausgabe in eine SQLite-Tabelle um, in die sie perfekt passt?

Es wäre großartig, wenn ich steuern könnte, ob ich möchte, dass Constraint-Breaking (z. B. denselben Primär-/Sekundärschlüssel wie die Datensätze bereits in der Tabelle haben) vorhandene Datensätze ersetzen oder stillschweigend verworfen werden.

Natürlich könnte ich direkte SQLite-Datenbankausgabeunterstützung in das Programm selbst einbauen, aber ich würde es vorziehen, wenn möglich den Unix-Weg zu gehen.

Akzeptierte Antwort:

Zwei Ansätze:

Beispiel test.csv Datei:

GroupName,Groupcode,GroupOwner,GroupCategoryID 
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
Liberty Elementary Teachers,Elem Teachers,13559,103
1st Grade Teachers,1stgrade,,104
2nd Grade Teachers,2nsgrade,13561,105
3rd Grade Teachers,3rdgrade,13562,106
Guidance Department,guidance,,107

1 ) Mit csvkit (eine Reihe von Befehlszeilentools zum Konvertieren in und Arbeiten mit CSV)

In sqlite3 importieren Datenbank:

csvsql --db sqlite:///test_db --tables test_tbl --insert test.csv

Wenn keine CSV-Eingabedatei angegeben wurde, akzeptiert sie CSV-Daten von stdin:

... | csvsql --db sqlite:///test_db --tables test_tbl --insert

Um Daten aus sqlite zu extrahieren Datenbank:

sql2csv --db sqlite:///test_db --query 'select * from test_tbl limit 3'

Die Ausgabe:

GroupName,Groupcode,GroupOwner,GroupCategoryID 
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102

2 ) Mit sqlite3 Befehlszeilentool (ermöglicht dem Benutzer die manuelle Eingabe und Ausführung von SQL-Anweisungen für eine SQLite Datenbank)

Verwenden Sie die Datei „.import ” Befehl zum Importieren von CSV-Daten (Comma Separated Value)
in eine SQLite-Tabelle. Die Datei „.import “-Befehl nimmt zwei Argumente, die
der Name der Plattendatei sind, aus der CSV-Daten gelesen werden sollen, und
der Name der SQLite-Tabelle, in die die CSV-Daten
eingefügt werden sollen.

Beachten Sie, dass es wichtig ist, den „Modus“ auf „csv“ zu setzen, bevor
.import ausgeführt wird " Befehl. Dies ist notwendig, um zu verhindern, dass die Befehlszeilen-Shell
versucht, den Text der Eingabedatei als ein anderes
Format zu interpretieren.

$ sqlite3
sqlite> .mode csv
sqlite> .import test.csv test_tbl
sqlite> select GroupName,Groupcode from test_tbl limit 5;
"System Administrators",sysadmin
"Independence High Teachers","HS Teachers"
"John Glenn Middle Teachers","MS Teachers"
"Liberty Elementary Teachers","Elem Teachers"
"1st Grade Teachers",1stgrade
sqlite> 

Linux
  1. Wie übergibt man ein Befehlszeilenargument an ein Shell-Skript?

  2. Wie fügt man Daten an den Puffer im Shell-Skript an?

  3. Liest Werte aus einer Pipe in eine Shell-Variable ein

  4. Wie füge ich ein Tabulatorzeichen in Iterm ein?

  5. So verschieben Sie alle Dateien, einschließlich versteckter Dateien, in das übergeordnete Verzeichnis über *

So exportieren Sie eine Tabelle von MySQL nach CSV

So fügen Sie Daten in eine MySQL-Datenbank mit PHP in XAMPP ein

So führen Sie Shell-Befehle über einen HTTP-Server aus

So überwachen Sie den Fortschritt von Daten durch eine Pipe mit dem Befehl „pv“.

So schreiben Sie Daten in eine Datei unter Linux

So importieren Sie Daten in Apache Solr