使用shell脚本从sqlite导出到csv

我正在做一个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脚本无法将数据导出到文件。

我究竟做错了什么?

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方法

您可以使用redirect来调用您的脚本:

 $ your_script >out.csv 

或者您可以在脚本中插入以下内容作为第一行:

 exec >out.csv 

前一种方法允许你指定不同的文件名,而后者输出到一个特定的文件名。 在这两种情况下, .output out.csv可以忽略。

而不是点命令,你可以使用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查看可用选项的列表。

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

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

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

虽然这个问题是关于shell脚本的,但是我认为这对那些只是将数据从sqlite3数据库传输到csv文件的人来说是很有帮助的。

我发现一个非常方便的方式来使用SQLitepipe理器扩展的Firefox浏览器。

只需连接到您的SQLite数据库文件在Firefox(SQlitepipe理器 – >连接数据库),然后表 – >导出表。 你将得到一些更多的选项,你可以点击并尝试….

最后你会得到一个csv文件,并且你select导出表格。