Nouveau cours : Traiter du texte : grep, sed, awk, jq
La partie Shell et outils du chapitre Fondations s'enrichit de Traiter du texte : grep, sed, awk, jq. Le cours Bash pour l'automatisation s'arrêtait souvent sur le même conseil : « au-delà de quelques milliers de lignes, passez à awk », « pour du JSON, prenez jq ». Ce cours prend le relais, et apprend à interroger et à transformer du texte : des journaux, des exports CSV, des fichiers de configuration, des réponses d'API.
Une enquête et un rapport plutôt qu'un catalogue d'options
On retrouve Signalements et sa machine de tâches de fond, sig-outils. Deux demandes arrivent le même matin. Les usagers ont reçu des erreurs pendant dix-sept minutes la veille, et personne n'a été alerté ; la mairie veut désormais un rapport hebdomadaire des signalements par commune. Tout est dans les fichiers : journaux texte et JSON des deux serveurs de l'API, exports CSV, référentiel des communes, configuration. Chaque leçon apporte un outil au moment où l'enquête ou le rapport en a besoin, explique ce qu'il fait réellement de chaque ligne, et montre où il cesse d'être le bon outil.
Un script de la première leçon fabrique en local une copie réduite et déterministe de ces fichiers : toutes les sorties montrées dans le cours ont été produites dessus, et vous obtiendrez les mêmes chez vous. À la fin, rapport-hebdo assemble awk et jq pour produire le rapport de la mairie et le volet technique de l'équipe, en Markdown et en JSON.
Ce que l'on apprend à ses dépens, en moins cher
Quelques-uns des pièges que les leçons démontent :
- une vérification de santé qui répond 200 pendant tout un incident, parce qu'elle ne consulte pas la base ;
uniq -csanssort, et des comptes faux sans le moindre message ;sort fichier > fichier, qui vide le fichier avant de le lire ;grep 500, qui trouve aussi1500et les durées en millisecondes ;sed -isur un lien symbolique ou un fichier à plusieurs liens physiques, et la configuration qui ne change pas là où on l'attendait ;- une modification de configuration qui ajoute une ligne de plus à chaque exécution, faute d'être idempotente ;
awk '$12 > 499', qui compte des lignes du noyau et desshdparce que la comparaison est devenue textuelle ;awk -F,sur un export CSV où une commune s'appelle « Saint-Exemple, centre » ;- le même programme awk qui donne des résultats différents sur une Debian (mawk) et sur une image cloud Ubuntu (gawk) ;
- une variable du shell collée dans un filtre jq ou un programme awk, et l'injection qui va avec ;
jq . config.json > config.json, et le fichier de configuration réduit à rien.
Pour valider
Un quiz valide le niveau 100 (Apprenti). Le lab fait reconstruire les programmes du cours sur votre poste, sans serveur ni cloud, puis un script les vérifie de l'extérieur sur les données d'essai et sur des entrées piégées : CSV aux guillemets cassés, fins de ligne Windows, adresses à anonymiser, configuration ambiguë, gros volume. Il valide le niveau 200 (Compagnon).