Tutto parte da questo tweet che rimanda a questo post.
Uh! semplice, non so se possa servire ma è sexy lo provo:
$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr
103 spo
100 mtw
94 stw
53 history
47 _j
46 _e
42 sx
39 cd
33 bash
29 gen
$
OK! ma mica devo scrivere ogni volta tutto questo; lo meto in uno script ed ecco:
$ cat m0
history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr
$ bash m0
$
OOPS! NO! non va.
Qui –no, non so spiegarmi il perché– ho dato la colpa a awk
e l’ho sostituito con sed
. sed
è più semplice, o ci sono più abituato, anche se quando sono finito su Unix mi sono procurato subito le fotocopie della shell (di SisV), di vi
(un articolo scritto da Bill Joy per Hewlett-Packard) e awk
(sì perché sembrava intrigante, assay.
La mia versione:
$ history | sed 's/[ 0-9]*//' | sed 's/[ ].*//' | sort | uniq -c | sort -n | tail | sort -nr
103 spo
98 mtw
93 stw
54 history
47 _j
46 _e
42 sx
39 cd
34 bash
30 gen
$
OK! sì lo so che si potrebbe approfittare che history
scrive il nome del programma sepre in colonna 7 ma già vengo spesso accusato di fortranismo residuo…
Provo a scriptarlo e
$ cat m1
history | sed 's/[ 0-9]*//' | sed 's/[ ].*//' | sort | uniq -c | sort -n | tail | sort -nr
$ bash m1
$
NO! come prima. Ho sentito Stack Overflow, googlato duck-duck-go-ato; visto che anche altri chiede a riguardo per operazioni simili riguardanti history
ma senza risultati. Allora ho cancellato tutto, in fondo a chi interessa una cosa così.
Poi capita che di notte, avete presente (sensa comparision (pron. sensa cumparisiun) dicono qui in Piemonte) Srinivasa Ramanujan e la dea Lakshmi di Namagiri? Ecco a me lo stesso ma seguo la Vera Fede e allora vengo ispirato da Sua Pastosità il Prodigioso FSM –sempre sia condito, RAmen– subito nella prima notte utile.
Fortuna che quando cancelli il ‘puter sa che gli umani a volte non sanno quello che fanno o poi cambiano idea e allora si può ripristinare il cancellato.
Se il problema è history
lo si può tener fuori dallo script e eseguire con una pipe. (Nota OT, qui: non so mai che genere usare, mi manca il neutro). Lo script (mou-r
) diventa:
#!/bin/bash
sed 's/[ 0-9]*//' | sed 's/[ ].*//' | sort | uniq -c | sort -n | tail | sort -nr
che abilitato e copiato in ~/bin
produce
$ history | mou-r
102 spo
98 mtw
93 stw
57 history
46 _j
46 _e
42 sx
39 cd
35 bash
30 gen
$
OK, ma è troppo lungo, creo un alias
$ alias mou='history | mou-r'
$ mou
102 spo
98 mtw
92 stw
57 history
46 _j
46 _e
42 sx
39 cd
35 bash
30 gen
$
Perfetto. L’alias
ovviamente va messo in ~/.bash_aliases
(o qualche altro file eseguito al boot. Ah! mou
sta per most used. Resta il mistero di history
ma frankly, my dear, I don’t give a damn (cit.) 🧐
⭕