LoginSignup
61
70

More than 5 years have passed since last update.

csvや標準入力をsqlで取得できるqコマンド

Last updated at Posted at 2015-03-12

csvファイルを扱うときにいつもなんかコマンドがあったはず!?ってググることから始めてしまうのでメモ。

ドキュメント

インストール条件

Just Python 2.5 and up or Python 2.4 with sqlite3 module installed. Python 3.x is not supported yet.

インストール

macだとbrewでできるらしい

brew install q

使い方

元のcsvファイル

aaa.csv
a_id,b_id,a_name,a_memo
1,1,aa1,a_memo1
2,2,aa2,a_memo2
3,3,aa3,a_memo3
4,4,aa4,a_memo4
5,5,aa5,a_memo5
6,6,aa6,a_memo6
7,7,aa7,a_memo7
8,8,aa8,a_memo8
9,9,aa9,a_memo9
10,10,aa10,a_memo10

絞込(select)

~/tmp  ᐅ q -H -O -d ',' "select * from aaa.csv where a_id in (2,4,6,8,10);"
a_id,b_id,a_name,a_memo
2,2,aa2,a_memo2
4,4,aa4,a_memo4
6,6,aa6,a_memo6
8,8,aa8,a_memo8

sumとかも使える。

~/tmp  ᐅ q -H -O -d ',' "select sum(b_id) from aaa.csv ;"
sum(b_id)
55

結合(join)

もう一つcsvファイルを用意

bbb.csv
b_id,b_name,b_memo
1,bb1,b_memo1
2,bb2,b_memo2
3,bb3,b_memo3
4,bb4,b_memo4
5,bb5,b_memo5
6,bb6,b_memo6
7,bb7,b_memo7
8,bb8,b_memo8
9,bb9,b_memo9
10,bb10,b_memo10
~/tmp  ᐅ q -H -O -d ',' "select a.*,b.b_name,b.b_memo from aaa.csv as a left join bbb.csv as b on a.b_id=b.b_id"
a_id,b_id,a_name,a_memo,b_name,b_memo
1,1,aa1,a_memo1,bb1,b_memo1
2,2,aa2,a_memo2,bb2,b_memo2
3,3,aa3,a_memo3,bb3,b_memo3
4,4,aa4,a_memo4,bb4,b_memo4
5,5,aa5,a_memo5,bb5,b_memo5
6,6,aa6,a_memo6,bb6,b_memo6
7,7,aa7,a_memo7,bb7,b_memo7
8,8,aa8,a_memo8,bb8,b_memo8
9,9,aa9,a_memo9,bb9,b_memo9
10,10,aa10,a_memo10,bb10,b_memo10

標準入力から

vimとかと同じで-で標準入力が取れる。

~/tmp  ᐅ cat aaa.csv|q -H -O -d ',' "select * from - where a_id=1"
a_id,b_id,a_name,a_memo
1,1,aa1,a_memo1

文字コード変換

csvとかだとsjisで作成されてることが多いのでかなり便利

以下はsjisファイルをutf-8に変換してる。

q -d ',' -e SJIS -E UTF-8 "select c3 from sjis_file.csv limit 10"

参考サイト

ぶっちゃけ参考サイトを見れば十分である。

61
70
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
70