csv ファイルの中身を SQL で検索したいときがたまにある。
q というコマンドが開発されている。ほとんどは grep で何とかなってしまっていたので、まともに取り組んだことはなかったのだけど、気が向いて使ってみた。
そして中身を覗いてみたら sqlite を使っている模様。少し調べてみると、今なら sqlite csv virtual table で役目を果たしそう。ちなみに q が記事で取り上げられたのは 2015-08 で、csv extension がリポジトリに入ったのは 2016-08 ですね。
q みたいに気軽に使うには、bash の関数で環境に置いておけばいいかな。
.bash_profile
# example:
# q "select c1 from rootname"
# where columns are "c"+number and tablename from filename "rootname.csv"
function q(){
FS=""
for f in *.{csv,CSV}; do
if [[ "x${f:0:1}" != 'x*' ]]; then
FS="$FS create virtual table temp.\`${f::-4}\` using csv(filename='$f');"
fi
done
sqlite3 -init <(echo ".load csv") "" "$FS $*";
}
opendata でとりあえずササっと解析したいときとか、楽だわー
そのほかの方法はこちらが詳しいです。
追記
追記2
最近(2024-01-05)は csvkit の csvsql が手ごろだと思う。