2019/10/06

q を使って CSV ファイルに SQL を発行する

"q" という、CSV や TSV に SQL をに発行できるコマンドがあります。
便利なのですが、名前がググりづらいことこの上無い感じですね。


環境

  • OS: macOS Mojave 10.14.6
  • Homebrew: 2.1.12-8-gfd9a09e
    • homebrew-core: (git revision 5b99; last commit 2019-10-05)
  • q: 1.7.4


インストール方法

  • $ brew install q
でインストールできます。


実行例

例えば、以下のような "servant.csv" があったとして


以下のように SQL が発行できます。
  • select
    • $ q -d, -H 'select * from servant.csv ;'
      • 1,Altria Pendragon,saver,5
      • 2,Altria Pendragon (alter),saver,4
      • 3,Altria Pendragon,archer,5
      • 4,Altria Pendragon,lancer,5
      • 5,Altria Pendragon (alter),lancer,4
  • count
    • $ q -d, -H 'select count(*) from servant.csv ;'
      • 5
  • limit
    • $ q -d, -H 'select * from servant.csv limit 2;'
      •  1,Altria Pendragon,saver,5
      •  2,Altria Pendragon (alter),saver,4
  • distinct
    • $ q -d, -H 'select distinct(name) from servant.csv ;'
      •  Altria Pendragon
      •  Altria Pendragon (alter)
  • where
    •  $ q -d, -H 'select id,name,class from servant.csv where rarity = 5;'
      •  1,Altria Pendragon,saver
      •  3,Altria Pendragon,archer
      •  4,Altria Pendragon,lancer
  • order 
    • $ q -d, -H 'select * from servant.csv order by rarity;'
      •  2,Altria Pendragon (alter),saver,4
      •  5,Altria Pendragon (alter),lancer,4
      •  1,Altria Pendragon,saver,5
      •  3,Altria Pendragon,archer,5
      •  4,Altria Pendragon,lancer,5
  • distinct + count
    •  $ q -d, -H 'select count(distinct(name)) from servant.csv ;'
      •  2
なお、付けているオプションは
  • -d (--delimiter) 今回は csv なので  ','  が delimiter です。
  • -H (--skip-header) 今回は一行目に header があるので、それは値としてみなしません。
    • と、いうことは header が無い場合も想定していると思われます(やったこと無し)。
です。--help は貴重な情報源。


まとめ

と、いう感じで、"q" を使うと CSV を色々いじったりできて便利です。
ちなみに、 Office で開くと重かったり止まったりするサイズの csv でも捌いてくれます。つよい。


参考

0 件のコメント:

コメントを投稿