web-dev-qa-db-fra.com

Exportateur de fichiers au format csv à l'aide d'un script shell

Je crée un script Shell pour exporter une requête sqlite dans 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 apparaît à l'écran au lieu d'être enregistrée dans "out.csv". Cela fonctionne de la même manière avec la ligne de commande, mais je ne sais pas pourquoi le script Shell ne parvient pas à exporter les données dans le fichier.

Qu'est-ce que je fais mal?

78
Rorro

sqlite3

Vous avez un appel distinct à sqlite3 pour chaque ligne; au moment où votre select s'exécute, votre .out out.csv a été oublié.

Essayer:

#!/bin/bash
./bin/sqlite3 ./sys/xserve_sqlite.db <<!
.headers on
.mode csv
.output out.csv
select * from eS1100_sensor_results;
!

au lieu.

méthodes sh/bash

Vous pouvez soit appeler votre script avec une redirection:

$ your_script >out.csv

ou vous pouvez insérer les éléments suivants en première ligne de votre script:

exec >out.csv

La première méthode vous permet de spécifier différents noms de fichiers, tandis que la seconde génère un nom de fichier spécifique. Dans les deux cas, la ligne .output out.csv peut être ignorée.

119
tzot

Au lieu des commandes point, vous pouvez utiliser les options de commande sqlite3:

sqlite3 -header -csv my_db.db "select * from my_table;" > out.csv

Cela en fait un one-liner.

En outre, vous pouvez exécuter un fichier de script SQL:

sqlite3 -header -csv my_db.db < my_script.sql > out.csv

Utilisez sqlite3 -help pour voir la liste des options disponibles.

149
Hollister

J'ai récemment créé un script Shell qui pourra extraire les tables d'un fichier db et les convertir en fichiers csv.

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

N'hésitez pas à me poser des questions sur mon script :)

6
DarrenNEEDSHELP

Bien que la question concerne le script Shell, je pense que cela aidera peu de ceux qui se soucient simplement de transférer les données de la base de données sqlite3 dans un fichier csv.

J'ai trouvé un moyen très pratique de le faire avec le navigateur Firefox utilisant l'extension SQLite Manager.

Connectez-vous simplement à votre fichier de base de données sqlite dans firefox (Gestionnaire SQlite -> connecter à la base de données), puis Tableau -> Exporter le tableau. Vous serez servi avec plus d'options que vous pouvez simplement cliquer et essayer ....

En fin de compte, vous obtenez un fichier csv avec la table que vous avez choisie d’être exportée.

0
infoclogged