Hier j’ai donné une liste des rapports issues/nombre de dépots par langages sur Github. Aujourd’hui je montre comment j’ai utilisé Vim (sur linux) pour calculer ce rapport et formater la liste.

Voici la liste de départ, à récupérer ici, il s’agit juste d’un copier/coller de la page web et je n’ai pris ici que les 5 premiers, c’est suffisant pour la démonstration:

1 	JavaScript .js	560,116	891,531	319,537	4,951	1,147	343,483
2 	Ruby .rb	466,411	469,913	175,577	2,726	607	147,339
3 	Java .java	388,610	376,683	231,186	4,185	825	161,136
4 	Python .py	281,835	323,858	130,034	2,538	685	184,908
5 	PHP .php	275,411	289,899	155,941	2,331	454	150,024

Alors on n’y comprend rien puisque les colonnes sont invisibles. On va former de belles colonnes à l’aide de l’utilitaire unix column:

:%! column -t

Et voici le résultat:

1  JavaScript  .js    560,116  891,531  319,537  4,951  1,147  343,483
2  Ruby        .rb    466,411  469,913  175,577  2,726  607    147,339
3  Java        .java  388,610  376,683  231,186  4,185  825    161,136
4  Python      .py    281,835  323,858  130,034  2,538  685    184,908
5  PHP         .php   275,411  289,899  155,941  2,331  454    150,024

Les colonnes qui m’intéresse sont la 1 (rang), la 2 (langage), la 4 (nombre de dépots) et la dernière (nombre d’issues actives). Je vais donc sélectionner la 3ème colonne à l’aide de Ctrl-v et la supprimer (avec d). Voici ce que donne la sélection d’une colonne en image si vous n’êtes pas familier de Vim:

Je répète ensuite la sélection/suppression pour les autres colonnes et j’obtiens:

1  JavaScript  560,116  343,483
2  Ruby        466,411  147,339
3  Java        388,610  161,136
4  Python      281,835  184,908
5  PHP         275,411  150,024

Il faut maintenant ajouter une colonne de chiffre qui contiendras le rapport d’issues par dépots en pourcentage. C’est à dire la 4ème colonne divisée par la 3ème colonne, le tout multiplié par 100. C’est classiquement un boulot qu’on confierai au langage Awk, mais j’ai décidé il y a quelques temps de faire le plus possible de choses avec Ruby, voici donc ce que j’ai écrit dans Vim:

:%! ruby -aple '$_ += " \#{(($F[3].to_f/$F[2].to_f)*100).to_i}"'

Un peu cryptique ? Je l’avoue bien volontiers, mais les one-shots sont rarement fait pour (peuvent rarement) être lisible… Je ferais certainement un article sur les switchs a, p, l et e de ruby. Quoiqu’il en soit, voici le résultat:

1  JavaScript  560,116  343,483 61
2  Ruby        466,411  147,339 31
3  Java        388,610  161,136 41
4  Python      281,835  184,908 65
5  PHP         275,411  150,024 54

Il reste à trier cette liste sur la 5ème et dernière colonne, un jeu d’enfant avec l’utilitaire unix sort:

:%! sort -k5nr
4  Python      281,835  184,908 65
1  JavaScript  560,116  343,483 61
5  PHP         275,411  150,024 54
3  Java        388,610  161,136 41
2  Ruby        466,411  147,339 31

Voilà, ça prend un certain temps à décrire mais c’est rapide à faire quand vous avez sous le coude une paire d’utilitaires qui déchirent !

À demain.