GNU/Linux >> Linux Esercitazione >  >> Linux

Come inserire i dati Csv in una tabella Sqlite tramite un tubo di shell?

Ho scritto un programma che restituisce il risultato allo standard output in formato CSV puro e rigoroso (ogni riga rappresenta un singolo record e contiene lo stesso insieme di campi separati da virgole, i campi contengono solo lettere inglesi minuscole, numeri e punti, senza spazi, nessuna virgoletta e nessun simbolo che potrebbe essere necessario eseguire l'escape/codificare).

Come posso reindirizzare questo output in una tabella SQLite in cui si adatta perfettamente?

Sarebbe fantastico se potessi controllare se voglio che l'interruzione dei vincoli (ad es. avere la stessa chiave primaria/secondaria dei record già nella tabella) sostituisca i record esistenti o venga eliminata silenziosamente.

Ovviamente potrei creare un supporto diretto per l'output del database SQLite nel programma stesso, ma preferirei seguire la via Unix, se possibile.

Risposta accettata:

Due approcci:

Esempio di test.csv file:

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 ) Con csvkit (una suite di strumenti da riga di comando per la conversione e l'utilizzo di CSV)

Importa in sqlite3 banca dati:

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

Se non è stato specificato alcun file CSV di input, accetterà i dati CSV da stdin:

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

Per estrarre dati da sqlite banca dati:

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

L'uscita:

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

2 ) Con sqlite3 strumento da riga di comando (consente all'utente di immettere ed eseguire manualmente istruzioni SQL su un SQLite banca dati)

Usa ".import ” comando per importare dati CSV (comma Separated Value)
in una tabella SQLite. Il ".import Il comando ” accetta due argomenti che
sono il nome del file del disco da cui devono essere letti i dati CSV e
il nome della tabella SQLite in cui devono essere
inseriti i dati CSV.

Tieni presente che è importante impostare la "modalità" su "csv" prima di eseguire
il ".import comando ". Ciò è necessario per evitare che la shell della riga di comando
tenti di interpretare il testo del file di input come un altro formato
.

$ 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. Come passare un argomento della riga di comando in uno script di shell?

  2. Come aggiungere i dati al buffer nello script della shell?

  3. Come avviare KVM Guest in una shell di Rescue

  4. Legge i valori in una variabile di shell da una pipe

  5. Come inserire una nuova riga nello script della shell di Linux?

Come esportare una tabella da MySQL a CSV

Come inserire dati nel database MySQL utilizzando PHP in XAMPP

Come eseguire i comandi della shell tramite il server HTTP

Come monitorare l'avanzamento dei dati attraverso un tubo utilizzando il comando "pv".

Come scrivere dati in file in Linux

Come importare dati in Apache Solr