TSVをSQLのselectで取得するツールqを使ってみた
使えた。
インストール
install_q.sh
#!/bin/bash # https://github.com/harelba/q cd /tmp/work wget https://raw.githubusercontent.com/harelba/packages-for-q/master/deb/q-text-as-data_1.7.1-2_all.deb sudo dpkg -i q-text-as-data_1.7.1-2_all.deb
使ってみる
TSVを作って全表示してみる。
echo -e 'Id\tName\n0\tA\n1\tB' > a.tsv q -H -t "select * from a.tsv"
0 A 1 B
特定のレコードを取得する。
q -H -t "select * from a.tsv where Id=1" # 0 A q -H -t "select * from a.tsv where Name='A'" # 1 B
特定のカラムを取得する。
q -H -t "select Name from a.tsv where Id=1" # B q -H -t "select Id from a.tsv where Name='A'" # 0
結合用テーブルを作成する。
echo -e 'Id\tAddress\n0\tA-Addr\n1\tB-Addr' > b.tsv
テーブル結合してみる。
q -H -t "select * from a.tsv as a left join b.tsv as b where a.Id=b.Id"
残念ながら結合キーが重複して出てしまう。
0 A 0 A-Addr 1 B 1 B-Addr
わざわざselect
句で出力項目をすべて指定してやらねばならない。
q -H -t "select a.Id, a.Name, b.Address from a.tsv as a left join b.tsv as b on a.Id=b.Id"
0 A A-Addr 1 B B-Addr
ファイルでなく標準入力からデータを得る。(ファイル結合は不可?)
cat a.tsv | q -H -t "select * from -"
OK!
罠
- TSVを使うときは
-t
オプションを使う(-d '\t'
,-d $'\t'
ではダメ) - CSVを使うときは
-d,
オプションを使う(-d','
,-d ','
でも可)
情報源
対象環境
- 2019-03-16
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux