2019年11月7日木曜日

SQLite 3 コマンドの実行結果の出力先を変更する「.output」について

概要

SQLite3 のコマンドラインツールでコマンドやSQLの実行結果の 出力先を切り替える方法について。
似たコマンドに 「 .once 」がある。

環境

  • Windows 10 64bit
  • SQLite3 (3.29.0) Command-Line Shell

ヘルプの内容

以下の内容しか表示されないが、「.once」 と同じように「-x」や「-e」のオプションが使える。


sqlite> .help .output
.output ?FILE?           Send output to FILE or stdout if FILE is omitted
     If FILE begins with '|' then open it as a pipe.
                

テキストファイルに出力する

以下の例ではsample_tableとsampletable2の内容をsample.txtに出力している。
4行目の引数なしで「.output」を実行することでファイル出力を止める。
(出力先をファイルからコンソールに切り替えている)


sqlite> .output sample.txt
sqlite> select * from sample_table;
sqlite> select * from sample_table2;
sqlite> .output 
                

テキストエディタで表示する

テキストエディタが起動して表示される。
起動するのは出力先を切り替えたタイミング。(3行目)
そこから編集したり保存しなおしたりできる。


sqlite> .output -e
sqlite> select * from sample_table;
sqlite> .output
                

スプレッドシートとして表示する

CSVエディタが起動して表示される。
起動するのは出力先を切り替えたタイミング。(3行目)
そこから編集したり保存しなおしたりできる。
sqliteの文字コードがutf-8のため、Microsoft Excelでは文字化けしてしまう。


sqlite> .output -x
sqlite> select * from sample_table;
sqlite> .output
                

Select文以外も出力できる

例えば、ヘルプをテキストファイルに保存しておきたい場合は・・・


sqlite> .output help.txt
sqlite> .help
sqlite> .output
                

パイプを使って別のコマンドに渡す

コマンドプロンプトやbashでおなじみのパイプ「|」で 出力結果を他のコマンドに渡すことができる。
こちらも文字コードの都合上、文字化けするのことがある。


sqlite> select * from sample_table
1|test001
2|sample002
sqlite> .output '| findstr test'
sqlite> select * from sample_table
sqlite> .output
1|test001
                

参考URL