Bon, grillé.-
La solution que je donne juste au-dessus ne fonctionne pas non plus, en fait
remplace plutà´t par :
sed -e 's/sudo //' $HOME/.bash_history | cut -d' ' -f1 | sort | uniq -c | sort -rg | head
Tu peux en faire un alias si ça t'amuse ...
J'édite aussi mon premier message
@cat_loic :
ça devient compliqué à suivre, ces edit partout...
Le truc principal, c'est le "pipe" |
Quand tu fait commande1 | commande2, ça envoie la sortie de la première sur l'entrée de la seconde.
Alors, étape par étape :
1. On lit le fichier dans lequel est stocké l'historique ($HOME/.bash_history), et on supprime les sudo des lignes, (sed -e "s/sudo//" )sinon, on se retrouverait avec sudo dans le top tout le temps...
2. On prend le résultat, et ligne par ligne, on découpe (cut), en penrant comme caractère l'epace -d' ', et on garde la première colonne (-f1) : comme ça, on a la commande (le premier mot de chaque ligne, si tu veux)
3. Ensuite, on trie par orde alphabétique (sort). Ce qui fait que les commandes répétées sont les unes à la suite des autres
4. Ensuite, on utilise l'outil uniq pour supprimer les lignes identiques consécutives, avec un -c pour indiquer combien de fois elles sont répétées.
La sortie d'uniq ressemble à :
1 a
5 apt
6 bc
6. on trie une nouvelle fois, mais dans l'ordre "naturel" : 9 vient avant 99, par exemple (-n), et à l'envers (-r), pour avoir les plus fréquents en premier
7. on ne garde que la tête du résultat "head", pour avoir uniquement les dix premières.
Tu peux faire un 'man' sur toutes les commandes pour en savoir plus.
Pour la petite histoire, l'idée m'est venue après qu'un prof d'info m'eut expliqué comment avoir le top10 des prénoms les plus utilisés sur le serveur de mon école.
Son but était de me montrer la puissance de bash, et effectivement, on arrive au résultat en une ligne.
L'écriture le la ligne en question est laissée en exercice au lecteur ...