我正在制作一个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查看可用选项的列表.
tzo*_*zot 122
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)
代替.
您可以使用重定向调用脚本:
$ your_script >out.csv
Run Code Online (Sandbox Code Playgroud)
或者您可以在脚本中插入以下内容作为第一行:
exec >out.csv
Run Code Online (Sandbox Code Playgroud)
前一种方法允许您指定不同的文件名,而后者则输出到特定的文件名.在这两种情况下,.output out.csv都可以忽略该行.
我最近创建了一个shell脚本,它可以从db文件中获取表并将它们转换为csv文件.
https://github.com/darrentu/convert-db-to-csv
随意问我关于我的脚本的任何问题:)