シェルスクリプトを使用してsqliteからcsvにエクスポートする


88

次のように、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」に保存されるのではなく、画面に表示されます。コマンドラインで同じ方法で動作していますが、シェルスクリプトがデータをファイルにエクスポートできない理由がわかりません。

私は何が間違っているのですか?

回答:


125

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

または、スクリプトの最初の行として次を挿入できます。

exec >out.csv

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


素晴らしい、ありがとう、今それは働いています!(そしてそれが必要だ「>>」の代わりに「>」の、しかし私は、Linuxでのnewbeiよ:D)
Rorro

1
ここでの回答が実際に質問回答している場合は、回答の総投票数の下にあるチェックマークをクリックする必要があります(薄い灰色で表示されます)。これにより、質問が回答済みとしてマークされます。
tzot 2011

遅れてすみません、私は本当の初心者です:D
Rorro

<<! ... !まさに私が必要としていたものです。ありがとう。
Rostyslav Druzhchenko

172

dotコマンドの代わりに、sqlite3コマンドオプションを使用できます。

sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv

これはそれをワンライナーにします。

また、SQLスクリプトファイルを実行することもできます。

sqlite3 -header -csv my_db.db < my_script.sql > out.csv

使用sqlite3 -help可能なオプションのリストを表示するために使用します。


3
はるかに良い...これは受け入れられた解決策でなければなりません!KISS :-)
pvandenberk 2015年

5
このソリューションは、sqlite3がパス上または同じディレクトリにある場合、Windowsでも機能します。
2015年

7

最近、dbファイルからテーブルを取得してcsvファイルに変換できるシェルスクリプトを作成しました。

https://github.com/darrentu/convert-db-to-csv

スクリプトについて質問があれば、遠慮なく質問してください:)


3
これは私を助けました。10行のコードをコピーして回答に貼り付ける必要があります。そうすれば、私がすでに与えた賛成票はより正当化されたと感じるでしょう。
mxmlnkn 2018

スクリプトにテーブル名の前後の引用符がありません(テーブル名にダッシュがある場合はエラーがスローされます)
Eric F.

0

質問はシェルスクリプトに関するものですが、sqlite3データベースからcsvファイルにデータを転送することに悩んでいる人のほとんどには役立つと思います。

SQLiteManager拡張機能を使用してFirefoxブラウザでそれを行う非常に便利な方法を見つけました。

Firefoxでsqliteデータベースファイルに接続し(SQliteマネージャー->データベースに接続)、次にテーブル->テーブルをエクスポートするだけです。クリックして試すことができるいくつかのオプションが表示されます。

最終的に、エクスポートするように選択したテーブルを含むcsvファイルを取得します。


0
Using command line for Linux:

user@dell-Admin: sqlite3 #activate your sqlite database first
sqlite> .tables #search for tables if any available if already created one.
sqlite> .schema #if you want to check the schema of the table.

# once you find your table(s), then just do the following:

sqlite> .headers on   #export along with headers (column names)
sqlite> .mode csv     #file type is csv
sqlite> .output example.csv   #you want to provide file name to export
sqlite> SELECT * from events;    #If entire table is needed or select only required
sqlite> .quit    #finally quit the sqlite3

システムでexample.csvファイルを検索すると、取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.