Extraction des tags de mon blog en ligne de commande
J’aimerais savoir quels sont les tags que j’ai le plus employé sur ce blog.
Pour cela il va d’abord falloir les extraire, si possible dans un fichier csv.
Comment ? En Ruby ? En R ? Non non, en Bash, ça va être beaucoup plus drôle.
Petite étude de cas pour découvrir la puissance de la ligne de commande, ou
pour rafraichir ses connaissances ;)
Si vous voulez reproduire l’analyse en même temps que moi, les
articles sont ici.
Voyons à quoi ressemble le début d’un article au hasard avec head.
Octopress, le framework que j’utilise pour ce blog, appelle les tags des
categories. Mais c’est pareil.
L’entête d’un article a toujours la même structure. Avec head *.markdown
j’affiche le début de tous les articles, les uns à la suite des autres.
Avec sed je peux extraire uniquement les lignes qui commencent par cat :
Gardons seulement les tableaux. cut -f1découpe le premier champ, -d' '
indique que le séparateur de champ est l’espace, et --complement indique
qu’on veut conserver le complément. Autrement dit tout sauf la première
colonne.
Supprimons les crochets à l’aide de sed et d’une regex rigolote.
Supprimons les espaces inutiles. Attention, certains tags contiennent des
espaces.
Grâce à tr, je remplace chaque virgule par un retour à la ligne. Ça
commence à prendre forme.
Trions par ordre alphabétique.
Réduisons les occurrences et comptons les avec uniq -c.
Trions à nouveau, cette fois sur le nombre et du plus grand au plus petit.
Vous avez remarquez ? Un tag est vide. Ça pourrait poser problème pour la
suite. Avec sed on peut facilement supprimer la dernière ligne.
À la réflexion je préfère faire comme si il y avait plusieurs lignes vides et
les supprimer toutes. Ça pourrait être plus réutilisable.
Il est temps de sortir une regex un peu plus complexe pour inverser les deux
champs et ajouter une virgule entre eux.
C’est quasiment terminé. Il reste à ajouter l’entête du fichier csv. Pour cela
je vais utiliser une commande non standard mais bien pratique, header.
On a terminé. C’est un beau pipeline, non ? Enregistrons le résultat dans un
fichier.
En bonus, voici le code R qui produit l’image qui illustre cet article.