Se l'input è ordinato, è possibile utilizzare uniq:
<infile cut -d' ' -f1 | uniq -c
In caso contrario, ordinalo prima:
<infile cut -d' ' -f1 | sort -n | uniq -c
Produzione:
3 1
1 3
2 52
L'output viene scambiato rispetto alle tue esigenze, puoi usarlo awk '{ print $2, $1 }'
per cambiarlo.
1 3
3 1
52 2
C'è anche il linguaggio awk, che non richiede input ordinati:
awk '{h[$1]++}; END { for(k in h) print k, h[k] }'
Produzione:
1 3
52 2
3 1
Poiché l'output qui proviene da un hash non verrà ordinato, passare a sort -n
se necessario:
awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n
Se stai usando GNU awk, puoi fare l'ordinamento da awk:
awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'
Negli ultimi due casi l'output è:
1 3
3 1
52 2