使用shell脚本从sqlite导出到csv

时间:2011-04-25 08:35:16

标签: sqlite shell 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脚本无法将数据导出到文件。

我做错了什么?

7 个答案:

答案 0 :(得分:154)

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

答案 1 :(得分:120)

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

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:0)

虽然问题是关于shell脚本的,但我认为这对于那些只是将数据从sqlite3数据库传输到csv文件感到困扰的人很少。

我找到了一种非常方便的方法,可以使用SQLite Manager扩展来使用firefox浏览器。

只需连接到firefox中的sqlite数据库文件(SQlite manager - &gt; connect database),然后连接到表 - &gt;导出表。您将获得更多选项,您只需单击并尝试....

最后,您将获得一个csv文件,其中包含您已选择导出的表。

答案 4 :(得分: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文件,您将得到它。

答案 5 :(得分:0)

一行是

sqlite3 -header -csv ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;" >./out.csv

答案 6 :(得分:0)

到目前为止答案的综合:

function sqlite2csv-table() {
    local db="${1}" table="${2}" output="${3}"
    if test -z "$output" ; then
        output="${db:r}_hi${table}.csv"
    fi
    [[ "$output" =~ '.csv$' ]] || output+='.csv'

    echo "$0: outputting table '$table' to '$output'"
    sqlite3 -header -csv "$db" "select * from ${table};" > "$output" || return $?
}
function sqlite2csv() {
    local db="${1}" o="${2}"

    tables=($(sqlite3 $db ".tables")) 
    local t
    for table in $tables[@] ; do
        sqlite2csv-table "$db" "$table" "${o}_${table}.csv"
    done
}

用法:

sqlite2csv some.db [/path/to/output]