使用shell脚本从sqlite导出到csv

Ror*_*rro 82 csv sqlite shell

我正在制作一个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"
Run Code Online (Sandbox Code Playgroud)

执行脚本时,输出在屏幕上显示,而不是保存到"out.csv".它正在使用命令行执行相同的方法,但我不知道为什么shell脚本无法将数据导出到文件.

我究竟做错了什么?

Hol*_*ter 161

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

sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv
Run Code Online (Sandbox Code Playgroud)

这使它成为一个单行.

此外,您可以运行sql脚本文件:

sqlite3 -header -csv my_db.db < my_script.sql > out.csv
Run Code Online (Sandbox Code Playgroud)

使用sqlite3 -help查看可用选项的列表.

  • 此解决方案也适用于Windows,授予sqlite3在您的路径或同一目录中. (4认同)
  • 更好,更好......这应该是公认的解决方案!吻:-) (2认同)

tzo*_*zot 122

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;
!
Run Code Online (Sandbox Code Playgroud)

代替.

sh/bash方法

您可以使用重定向调用脚本:

$ your_script >out.csv
Run Code Online (Sandbox Code Playgroud)

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

exec >out.csv
Run Code Online (Sandbox Code Playgroud)

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


Dar*_*ELP 6

我最近创建了一个shell脚本,它可以从db文件中获取表并将它们转换为csv文件.

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

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

  • 这对我有帮助。您应该将 10 行代码复制粘贴到您的答案中,然后我已经给出的赞成票会感觉更合理。 (4认同)