[LINUX] [Pour les débutants] Script dans les 10 lignes (7. Script qui génère le csv à partir de la table sqlite3 avec bash

[Pour les débutants] Script dans les 10 lignes (7. Script qui génère csv à partir de la table sqlite3 avec bash)

Si vous utilisez diverses bibliothèques avec python, j'ai pensé: "C'est pratique parce que vous pouvez faire une petite chose avec un peu de code, et vous pouvez créer un petit script avec un peu de 5 étapes", donc c'est juste une liste de python et d'autres commandes. Je peux trouver ceci, mais je publierai un script en 10 étapes sur une base irrégulière.

En tant que ** 7ème **, je voudrais publier un script qui génère le csv de la table sqlite3 avec bash. </ font>

Bien qu'il s'agisse de données un peu anciennes, je vais publier une instruction select de sqlite3 qui stocke le csv du taux de change fred que j'ai téléchargé et l'affiche séparé par des virgules.


1. Un script qui génère csv à partir de la table sqlite3

【environnement】 Linux: debian10 sqlite3: version 3.27.2 bash: 5.0.3

Dans sqlite3, la méthode de sortie en séparant par des virgules est que vous pouvez spécifier le délimiteur avec l'option "-separator" en plus de ".mode csv comme commande de sqlite3".

Ensuite, je pense que la syntaxe est la suivante, mais après avoir essayé diverses choses, ** J'ai pensé qu'il serait préférable de passer le fichier externe de [2] à sqlite3 par pipe. ** **

[1] sqlite3 (-separator,) nom de fichier sqlite.sqlite3 "instruction ou commande sql" [2] echo'.read "Fichier externe qui décrit sql" '| sqlite3 -separator, "Database file name"

J'ai lu et extrait le fichier qui décrit sql, mais la plupart sont des commentaires. À l'exception de la définition de la base de données et de l'instruction sql externe en retrait sur plusieurs lignes, l'opération de sqllite3 est aussi simple qu'une ligne. </ font> Si vous souhaitez enregistrer les résultats de l'extraction, redirigez simplement.

Le fichier sqlite correspondant à la base de données est "dexjpus.sqlite3" dans le répertoire courant. Comme indiqué ci-dessous, il s'agit de données de séries chronologiques composées de deux colonnes, la date et le prix du marché.

sqlite> .schema CREATE TABLE t_dexjpus( "DATE" TEXT, "dexjpus" TEXT ); sqlite>

Le script a été exécuté à partir du terminal.

bash,sqlite3



#!/usr/bin/env bash
#####################################
#Un script qui génère csv à partir d'une table sqlite3
# sqlite3: version 3.27.2
# bash: 5.0.3
# sqlite3:nom de fichier: dexjpus.sqlite3
#fichier de description sql: select_tbl.sql
# sqlite3 (-separator ,)nom de fichier sqlite.sqlite3 "instruction ou commande sql"
#sortie csv: -separator ,
# #
#####################################

#nom de fichier
db_file=dexjpus.sqlite3
#echo '.read select_tbl.sql' | sqlite3 -separator , dexjpus.sqlite3

#commande sqlite ".Lisez le fichier externe qui décrit sql avec "read"
#Passer à sqlite3 pour sentir le séparateur ",Spécifier
#Ouvrez le fichier contenant les données
echo '10 cas par ordre croissant'
echo '.read select_tbl_asc.sql' | sqlite3 -separator , $db_file
echo ''
echo '10 cas par ordre décroissant'
echo '.read select_tbl_desc.sql' | sqlite3 -separator , $db_file

2. En regardant la lecture de l'instruction SQL

Le fichier externe peut être décrit sur une seule ligne, mais pour le moment, il est décrit avec des sauts de ligne. </ font> Comme "echo'.read select_tbl_asc.sql '| sqlite3 -separator, $ db_file" J'ai lu la déclaration SQL suivante. Ces données semblent inclure une période dans le prix du marché les jours où il n'y a pas de transaction.

** À part cela, j'ai recherché 10 éléments dans l'ordre croissant. ** **

sqlite3



select 
* 
from t_dexjpus 
        where dexjpus is not '.'        
        order by dexjpus asc 
        limit 10; 

** J'ai également lu un autre fichier avec 10 recherches dans l'ordre décroissant. ** **

sqlite3



select 
* 
from t_dexjpus 
        order by dexjpus desc 
        limit 10; 

Résultat de l'exécution

bash



$ sh sqlite3_rev_csv.sh > out.txt

$ less out.txt
10 cas par ordre croissant
2016-08-18,100.0700
2016-08-23,100.2000
2016-08-17,100.2400
2016-08-19,100.2400
2016-08-22,100.2500
2016-08-16,100.2800
2016-09-26,100.3400
2016-09-27,100.3600
2016-08-24,100.5000
2016-09-28,100.5700

10 cas par ordre décroissant
2015-06-05,125.5800
2015-06-08,125.0800
2015-08-11,124.9000
2015-08-05,124.8400
2015-06-01,124.6400
2015-08-06,124.6000
2015-06-04,124.5600
2015-08-10,124.5500
2015-08-18,124.3900
2015-07-30,124.3800

En écrivant une instruction sql externe en utilisant ".read" de sqlite, il est facile de la réutiliser et il semble qu'il puisse gérer des instructions SQL compliquées. </ font>

Il semble que sqlite3 soit facile à connecter à partir de langages tels que python ainsi que shell, est facile à utiliser sur une base de fichier et possède de nombreuses fonctions. Compte tenu de la propagation des appareils intelligents et de l'IoT dans le futur </ font>, je pense que cela deviendra de plus en plus important à l'avenir.

** Il s'agit du script qui génère le csv de la table sqlite3 avec 7.bash. ** **

Recommended Posts