使用Shell脚本从sqlite导出到csv


87

我正在制作一个shell脚本,将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”。它正在使用命令行执行相同的方法,但是我不知道为什么shell脚本无法将数据导出到文件中。

我究竟做错了什么?

Answers:


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:D中的
新手

1
如果此处的答案确实回答了您的问题,则应单击答案总票数下方的复选标记(它对您来说应该是浅灰色的)。这将问题标记为已回答。
tzot 2011年

抱歉延迟,我是一个真正的新手:D
罗罗(Rorro)2011年

<<! ... !正是我所需要的。谢谢。
Rostyslav Druzhchenko

170

您可以使用sqlite3命令选项来代替dot命令:

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查看可用选项的列表。


2
好多了……这应该是公认的解决方案!
亲吻

4
只要sqlite3在您的路径或同一目录中,该解决方案也可以在Windows上使用。
amenthes

7

我最近创建了一个Shell脚本,它将能够从db文件中获取表并将其转换为csv文件。

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

随时问我关于脚本的任何问题:)


2
这对我有帮助。您应该将10行代码复制粘贴到您的答案中,然后我已经给出的支持意见会更加合理。
mxmlnkn

该脚本缺少表名的引号(如果表名带有破折号,则会引发错误)
Eric F.

0

尽管问题是关于shell脚本的,但我认为这对那些不愿将sqlite3数据库中的数据传输到csv文件中的人有帮助。

我发现使用SQLite Manager扩展使用Firefox浏览器的一种非常方便的方法。

只需在firefox中连接到sqlite数据库文件(SQlite管理器-> connect database),然后连接到Table-> Export table。您将获得更多选择,只需单击即可尝试。

最后,您将获得一个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文件,您将获得它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.