miller, traiter les fichiers CSV (et autres) en ligne de commande
2021-09-16
Hier, j’ai découvert le programme mlr
(https://github.com/johnkerl/miller)
Il est installable par apt sous ubuntu.
Il permet d’effectuer des traitements sur les fichiers dont les données sont indexées par nom
name-indexed data such as CSV, TSV, and tabular JSON
La documentation semble bien étoffée: https://miller.readthedocs.io/en/latest/index.html
$ wget https://www.data.gouv.fr/fr/datasets/r/de7d0863-13e8-4010-9c75-487269f5d7ac -O depts.csv
...
depts.csv 100%[=====================================================================================================================>] 3,25K --.-KB/s ds 0,01s
...
$ cat depts.csv | head -n 2
code_departement,nom_departement,code_region,nom_region
1,Ain,84,Auvergne-Rhône-Alpes
$ cat depts.csv | tail -n 2
974,La Réunion,4,La Réunion
976,Mayotte,6,Mayotte
$ mlr --icsv --from depts.csv --opprint cat|head
code_departement nom_departement code_region nom_region
1 Ain 84 Auvergne-Rhône-Alpes
2 Aisne 32 Hauts-de-France
3 Allier 84 Auvergne-Rhône-Alpes
4 Alpes-de-Haute-Provence 93 Provence-Alpes-Côte d'Azur
5 Hautes-Alpes 93 Provence-Alpes-Côte d'Azur
6 Alpes-Maritimes 93 Provence-Alpes-Côte d'Azur
7 Ardèche 84 Auvergne-Rhône-Alpes
8 Ardennes 44 Grand Est
9 Ariège 76 Occitanie
$ mlr --icsv --from depts.csv --opprint filter '$nom_departement =~ "^G"'
code_departement nom_departement code_region nom_region
30 Gard 76 Occitanie
32 Gers 76 Occitanie
33 Gironde 75 Nouvelle-Aquitaine
971 Guadeloupe 1 Guadeloupe
973 Guyane 3 Guyane
Exemple pour retrouver les communes de Dordogne qui ont un code postal girondin (et oui, cela existe !) :
$ mlr --icsv --from ~/Téléchargements/communes-departement-region.csv filter -S '$code_commune_INSEE=~"^24" && $code_postal=~"^33"'
code_commune_INSEE=24189,nom_commune_postal=FOUGUEYROLLES,code_postal=33220,libelle_acheminement=FOUGUEYROLLES,ligne_5=,latitude=44.8684209151,longitude=0.188754198495,code_commune=189,article=,nom_commune=Fougueyrolles,nom_commune_complet=Fougueyrolles,code_departement=24,nom_departement=Dordogne,code_region=75,nom_region=Nouvelle-Aquitaine
code_commune_INSEE=24335,nom_commune_postal=PORT STE FOY ET PONCHAPT,code_postal=33220,libelle_acheminement=PORT STE FOY ET PONCHAPT,ligne_5=,latitude=44.8622535573,longitude=0.208854675888,code_commune=335,article=,nom_commune=Port-Sainte-Foy-et-Ponchapt,nom_commune_complet=Port-Sainte-Foy-et-Ponchapt,code_departement=24,nom_departement=Dordogne,code_region=75,nom_region=Nouvelle-Aquitaine