GNU/Linux >> Znalost Linux >  >> Linux

Jak vložit data CSV do tabulky Sqlite pomocí potrubí Shell?

Napsal jsem program, který vypíše výsledek na standardní výstup ve striktně čisté podobě CSV (každý řádek představuje jeden záznam a obsahuje stejnou sadu polí oddělených čárkami, pole obsahují pouze malá anglická písmena, čísla a tečky, žádné mezery, žádné uvozovky a žádné symboly, které by mohly vyžadovat escapování/kódování).

Jak přesměruji tento výstup do tabulky SQLite, do které se perfektně hodí?

Bylo by skvělé, kdybych mohl řídit, zda chci, aby porušení omezení (např. mít stejný primární/sekundární klíč jako záznamy již v tabulce) nahradilo existující záznamy, nebo bylo potichu vyřazeno.

Samozřejmě bych mohl zabudovat přímou podporu výstupu databáze SQLite v programu samotném, ale pokud je to možné, preferoval bych cestu unixu.

Přijatá odpověď:

Dva přístupy:

Ukázka test.csv soubor:

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 ) Pomocí csvkit (sada nástrojů příkazového řádku pro převod do CSV a práci s ním)

Importujte do sqlite3 databáze:

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

Pokud nebyl zadán žádný vstupní soubor csv, bude přijímat data csv z stdin:

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

Chcete-li extrahovat data z sqlite databáze:

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

Výstup:

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

2 ) Pomocí sqlite3 nástroj příkazového řádku (umožňuje uživateli ručně zadávat a spouštět příkazy SQL proti SQLite databáze)

Použijte „.import ” k importu dat CSV (hodnota oddělená čárkami)
do tabulky SQLite. Soubor „.import ” přebírá dva argumenty, které
jsou název souboru na disku, ze kterého se mají číst data CSV, a
název tabulky SQLite, do které se mají
vkládat data CSV.

Pamatujte, že je důležité nastavit „mode“ na „csv“ před spuštěním
.import “příkaz. To je nezbytné k tomu, aby se shell příkazového řádku
nepokoušel interpretovat text vstupního souboru jako nějaký jiný
formát.

$ 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. Jak předat argument příkazového řádku do skriptu Shell?

  2. Jak připojit data do vyrovnávací paměti ve skriptu Shell?

  3. Jak nabootovat KVM Guest do záchranného shellu

  1. Číst hodnoty do proměnné shellu z kanálu

  2. Jak přesunout všechny soubory včetně skrytých souborů do nadřazeného adresáře přes *

  3. Jak začnu v bash, když ssh'dám na můj server?

  1. Jak odesílat multicastové pakety přes specifické rozhraní v Linuxu

  2. Jak vložím znak tabulátoru do Itermu?

  3. Jak vložit nový řádek do skriptu prostředí Linux?