Если вход отсортирован, вы можете использовать uniq:
<infile cut -d' ' -f1 | uniq -c
Если нет, сначала отсортируйте это:
<infile cut -d' ' -f1 | sort -n | uniq -c
Выход:
3 1
1 3
2 52
Вывод поменялся по сравнению с вашим требованием, вы можете использовать awk '{ print $2, $1 }'
чтобы изменить это.
1 3
3 1
52 2
Есть также идиома awk, которая не требует сортированного ввода:
awk '{h[$1]++}; END { for(k in h) print k, h[k] }'
Выход:
1 3
52 2
3 1
Так как вывод здесь происходит из хеша, он не будет упорядочен, передайте sort -n
если это необходимо:
awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n
Если вы используете GNU awk, вы можете выполнить сортировку изнутри awk:
awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'
В последних двух случаях вывод:
1 3
3 1
52 2