Aller au contenu

Miller

À quoi il sert

Miller (commande mlr) applique aux fichiers CSV, TSV et JSON ce que cut, sort, join et awk font sur du texte, mais par nom de colonne et en lisant correctement chaque format : un champ CSV entre guillemets qui contient une virgule, un guillemet doublé ou un saut de ligne reste un seul champ. Ses verbes s'enchaînent avec then : mlr --icsv --opprint filter '$commune == "Exempleville"' then count-distinct -f type then sort -nr count exports.csv filtre, compte et trie sans aucune hypothèse sur la position des colonnes. Il convertit aussi d'un format à l'autre (--icsv --ojson), joint deux fichiers (join), calcule des statistiques (stats1 -a mean,p95) et dispose d'un petit langage d'expressions proche d'awk. Réécrit en Go depuis la version 6, il est empaqueté en 6.13.0 dans Debian 13 et en 6.11.0 dans Ubuntu 24.04 (dépôt universe).

Quand le choisir

Dès que les données sont du vrai CSV (champs protégés par des guillemets, colonnes nommées par un en-tête) et que la tâche dépasse un simple affichage : awk avec -F, découpe faux, et une fonction d'analyse CSV en awk portable reste un bricolage. Miller est aussi un bon choix pour des conversions CSV vers JSON ou TSV en tête d'une chaîne jq ou awk. Pour un traitement qui devient un programme (plusieurs sources, logique métier), Python et son module csv, ou une base comme SQLite ou DuckDB, restent plus adaptés.

Points d'attention

  • Il n'est pas installé par défaut : sur un serveur, c'est un paquet de plus à justifier et à tenir à jour.
  • Les options de format se placent avant les verbes (--icsv --ojson, --c2p pour CSV vers affichage aligné) ; sans elles, Miller attend le format DKVP (clé=valeur).
  • Les valeurs qui ont l'air de nombres sont converties ; un code qui commence par zéro ou un identifiant très long peut changer de forme : vérifiez la sortie.
  • Les noms de colonnes accentués ou contenant des espaces s'écrivent entre accolades dans les expressions (${Pour 1 000 hab.}).

Par où commencer

La leçon awk : agréger, joindre et produire un rapport, qui montre où awk cesse de lire correctement le CSV, et la leçon jq : transformer, produire du JSON et choisir son outil, qui situe Miller parmi les autres outils. Puis la documentation de Miller 6, et sa page Questions about joins.