91 votes

Exportation de sqlite vers csv en utilisant le shell script.

Je fais un shell script pour exporter une requête sqlite vers un fichier csv, comme ceci :

 #!/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"

Lors de l'exécution du script, la sortie s'affiche à l'écran, au lieu d'être enregistrée dans "out.csv". Cela fonctionne en utilisant la même méthode avec la ligne de commande, mais je ne sais pas pourquoi le script de l'interpréteur de commandes ne parvient pas à exporter les données vers le fichier.

Qu'est-ce que je fais de mal ?

0voto

aborruso Points 591

Dans une ligne, c'est

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

0voto

HappyFace Points 305

Une synthèse des réponses apportées jusqu'à présent :

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
}

Utilisation :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X