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"
参考サイト
ぶっちゃけ参考サイトを見れば十分である。