1. ホーム
  2. sqlite

[解決済み] シェルスクリプトを使ったsqliteからcsvへのエクスポート

2023-03-13 05:53:57

質問

SQLiteのクエリをcsvファイルにエクスポートするシェルスクリプトを作っているのですが、以下のような感じです。

 #!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db ".headers on"
./bin/sqlite3 ./sys/xserve_sqlite.db ".mode csv"
./bin/sqlite3 ./sys/xserve_sqlite.db ".output out.csv"
./bin/sqlite3 ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;"
./bin/sqlite3 ./sys/xserve_sqlite.db ".exit"

スクリプトを実行すると、出力が "out.csv" に保存されずに画面に表示されます。コマンドラインでも同じ方法で動作していますが、なぜシェルスクリプトがファイルへのデータのエクスポートに失敗するのかわかりません。

私は何を間違えているのでしょうか。

どうすればよいのでしょうか?

sqlite3

を別途呼び出して sqlite3 を個別に呼び出しています。 select が実行される頃には、あなたの .out out.csv は忘れ去られました。

試してみてください。

#!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db <<!
.headers on
.mode csv
.output out.csv
select * from eS1100_sensor_results;
!

の代わりに

sh/bashメソッド

リダイレクトでスクリプトを呼び出すかのどちらかです。

$ your_script >out.csv

または、スクリプトの1行目として以下を挿入することができます。

exec >out.csv

前者は異なるファイル名を指定することができ、後者は特定のファイル名に出力する方法です。どちらの場合も、行 .output out.csv の行は無視できます。