bash x sqlite
bashからsqliteを操作する。
dnf -y install sqlite
csv
cat <<'EOF'> a.csv
h1,h2,h3
"c1,x",c2,c3
EOF
cat a.csv | sqlite3 b.db -cmd ".mode csv" -cmd ".import /dev/stdin mytable"
sqlite3 -header b.db "SELECT * FROM mytable"
sqlite3 b.db "SELECT * FROM mytable"
table - myid
cat <<'EOF'> a.csv
id
a
b
c
EOF
cat a.csv | sqlite3 data.db -cmd ".mode csv" -cmd ".import /dev/stdin myid"
sqlite3 data.db <<'SQL'
CREATE TABLE myid (
id TEXT PRIMARY KEY
);
CREATE TABLE mydata (
key TEXT PRIMARY KEY,
value INTEGER
);
SQL
table - mydata
cat <<'EOF'> a.csv
key,value
a,1
b,2
c,3
EOF
cat a.csv | sqlite3 data.db -cmd ".mode csv" -cmd ".import /dev/stdin mydata"
outer join
myidtableのidをキーに、mydatatableのkeyに照らし合わせる。
合致するmydataのvalueを出力する。
sqlite3 -header data.db "
SELECT
myid.id,
mydata.value
FROM myid
LEFT OUTER JOIN mydata
ON myid.id = mydata.key;
"
sqlite3 data.db "DROP TABLE myid;"
sqlite3 data.db "DROP TABLE mydata;"
Reference
https://qiita.com/arc279/items/bba7f6be362e376f06ab
tsv
{ seq -f 'header%g' 3; seq -f 'content%g' 9; } | paste - - - | tee sample.tsv
TABLE_NAME=sample
cat sample.tsv | sqlite3 -separator $'\t' -header -cmd ".import /dev/stdin ${TABLE_NAME}" a.db
sqlite3 -header a.db "SELECT * FROM ${TABLE_NAME}"