Se a entrada estiver classificada, você pode usar o uniq:
<infile cut -d' ' -f1 | uniq -c
Se não, classifique primeiro:
<infile cut -d' ' -f1 | sort -n | uniq -c
Saída:
3 1
1 3
2 52
A saída é trocada em comparação com sua exigência, você pode usar awk '{ print $2, $1 }'
para alterar isso.
1 3
3 1
52 2
Há também o idioma do awk, que não requer entrada classificada:
awk '{h[$1]++}; END { for(k in h) print k, h[k] }'
Saída:
1 3
52 2
3 1
Como a saída aqui vem de um hash, ela não será ordenada, passe para sort -n
se isso for necessário:
awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n
Se você está usando o GNU awk, você pode fazer a classificação dentro do awk:
awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'
Nos dois últimos casos, a saída é:
1 3
3 1
52 2