Dai un'occhiata a https://github.com/harelba/q, uno strumento Python per trattare il testo come un database. Di default usa gli spazi per delimitare i campi, ma il -d ,
parametro gli consentirà di elaborare i file CSV.
In alternativa, puoi importare il file CSV in SQLite e quindi eseguire i comandi SQL su di esso. Questo è scriptabile, con un po' di sforzo.
C'è anche csvsql (parte di csvkit)!
Non solo può eseguire sql su un determinato csv (convertendolo in sqlite dietro le quinte), ma anche convertire e inserire in uno dei tanti database sql supportati!
Ecco il comando di esempio (anche in csvsql_CDs_join.sh):
csvsql --query 'SELECT CDTitle,Location,Artist FROM CDs JOIN Artists ON CDs.ArtistID=Artists.ArtistID JOIN Locations ON CDs.LocID = Locations.LocID' "[email protected]"
che mostra come unire tre tabelle (disponibile in csv_inputs in csv_dbs_examples).
(anche la formattazione con csvlook fa parte di csvkit)
Ingressi
$ csvlook csv_inputs/CDs.csv
| CDTitle | ArtistID | LocID |
| -------- | -------- | ----- |
| CDTitle1 | A1 | L1 |
| CDTitle2 | A1 | L2 |
| CDTitle3 | A2 | L1 |
| CDTitle4 | A2 | L2 |
$ csvlook csv_inputs/Artists.csv
| ArtistID | Artist |
| -------- | ------- |
| A1 | Artist1 |
| A2 | Artist2 |
$ csvlook csv_inputs/Locations.csv
| LocID | Location |
| ----- | --------- |
| L1 | Location1 |
| L2 | Location2 |
csvsql
$ csvsql --query 'SELECT CDTitle,Location,Artist FROM CDs JOIN Artists ON CDs.ArtistID=Artists.ArtistID JOIN Locations ON CDs.LocID = Locations.LocID' "[email protected]" | csvlook
Produce:
| CDTitle | Location | Artist |
| -------- | --------- | ------- |
| CDTitle1 | Location1 | Artist1 |
| CDTitle2 | Location2 | Artist1 |
| CDTitle3 | Location1 | Artist2 |
| CDTitle4 | Location2 | Artist2 |