[LINUX] [Für Anfänger] Skript innerhalb von 10 Zeilen (7. Skript, das CSV aus der SQLite3-Tabelle mit Bash ausgibt

[Für Anfänger] Skript innerhalb von 10 Zeilen (7. Skript, das CSV aus der SQLite3-Tabelle mit Bash ausgibt)

Wenn Sie verschiedene Bibliotheken mit Python verwenden, dachte ich: "Es ist praktisch, weil Sie mit ein wenig Code ein kleines Ding machen und mit ein paar 5 Schritten ein kleines Skript erstellen können." Es ist also nur eine Liste von Python und anderen Befehlen. Ich kann mir das einfallen lassen, aber ich werde unregelmäßig ein 10-Schritte-Skript veröffentlichen.

Als ** 7. ** möchte ich ein Skript veröffentlichen, das CSV aus der sqlite3-Tabelle mit bash ausgibt. </ font>

Obwohl es sich um ein wenig alte Daten handelt, werde ich eine select-Anweisung von sqlite3 ausgeben, in der die CSV des von mir heruntergeladenen Fred-Wechselkurses gespeichert und durch Kommas getrennt angezeigt wird.


1. Skript, das CSV aus der SQLite3-Tabelle ausgibt

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

In sqlite3 besteht die Methode zur Ausgabe durch Trennen durch Kommas darin, dass Sie das Trennzeichen mit der Option "-separator" zusätzlich zu ".mode csv als Befehl von sqlite3" angeben können.

Dann denke ich, dass die Syntax wie folgt ist, aber nachdem ich verschiedene Dinge ausprobiert habe, ** Ich dachte, es wäre besser, die externe Datei von [2] per Pipe an sqlite3 zu übergeben. ** ** **

[1] sqlite3 (-separator,) sqlite-Dateiname.sqlite3 "SQL-Anweisung oder Befehl" [2] echo'.read "Externe Datei, die SQL beschreibt" '| sqlite3 -separator, "Name der Datenbankdatei"

Ich lese und extrahiere die Datei, die SQL beschreibt, aber die meisten davon sind Kommentare. Mit Ausnahme der Datenbankdefinition und der in mehreren Zeilen eingerückten externen SQL-Anweisung ist die Operation von sqllite3 so einfach wie eine Zeile. </ font> Wenn Sie die Extraktionsergebnisse speichern möchten, leiten Sie einfach um.

Die der Datenbank entsprechende SQLite-Datei lautet im aktuellen Verzeichnis "dexjpus.sqlite3". Wie unten gezeigt, handelt es sich um Zeitreihendaten, die aus zwei Spalten bestehen: Datum und Marktpreis.

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

Das Skript wurde vom Terminal ausgeführt.

bash,sqlite3



#!/usr/bin/env bash
#####################################
#Ein Skript, das CSV aus einer SQLite3-Tabelle ausgibt
# sqlite3: version 3.27.2
# bash: 5.0.3
# sqlite3:Dateiname: dexjpus.sqlite3
#SQL-Beschreibungsdatei: select_tbl.sql
# sqlite3 (-separator ,)SQLite-Dateiname.sqlite3 "SQL-Anweisung oder Befehl"
#CSV-Ausgabe: -separator ,
# #
#####################################

#Dateiname
db_file=dexjpus.sqlite3
#echo '.read select_tbl.sql' | sqlite3 -separator , dexjpus.sqlite3

#SQLite-Befehl ".Lesen Sie die externe Datei, die SQL beschreibt, mit "Lesen".
#Pipe zu sqlite3, um Separator zu fühlen ",Angeben
#Öffnen Sie die Datei, die die Daten enthält
echo '10 Fälle in aufsteigender Reihenfolge'
echo '.read select_tbl_asc.sql' | sqlite3 -separator , $db_file
echo ''
echo '10 Fälle in absteigender Reihenfolge'
echo '.read select_tbl_desc.sql' | sqlite3 -separator , $db_file

2. Lesen Sie die SQL-Anweisung

Die externe Datei kann in einer Zeile beschrieben werden, wird jedoch vorerst mit Zeilenumbrüchen beschrieben. </ font> Als "echo'.read select_tbl_asc.sql '| sqlite3 -separator, $ db_file" Ich habe die folgende SQL-Anweisung gelesen. Diese Daten scheinen einen Zeitraum im Marktpreis an Tagen zu enthalten, an denen keine Transaktion stattfindet.

** Ansonsten habe ich 10 Artikel in aufsteigender Reihenfolge durchsucht. ** ** **

sqlite3



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

** Ich habe auch eine andere Datei mit 10 Suchanfragen in absteigender Reihenfolge gelesen. ** ** **

sqlite3



select 
* 
from t_dexjpus 
        order by dexjpus desc 
        limit 10; 

Ergebnis der Ausführung

bash



$ sh sqlite3_rev_csv.sh > out.txt

$ less out.txt
10 Fälle in aufsteigender Reihenfolge
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 Fälle in absteigender Reihenfolge
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

Durch externes Schreiben einer SQL-Anweisung mit ".read" von SQLite ist die Wiederverwendung einfach und es scheint, dass sie komplizierte SQL-Anweisungen verarbeiten kann. </ font>

Es scheint, dass sqlite3 leicht aus Sprachen wie Python und Shell zu verbinden ist, einfach auf Dateibasis zu verwenden ist und über zahlreiche Funktionen verfügt. Angesichts der zukünftigen Verbreitung von Smart Devices und IoT </ font> denke ich, dass dies in Zukunft immer wichtiger wird.

** Dies ist das Skript, das csv aus der sqlite3-Tabelle mit 7.bash ausgibt. ** ** **