Você pode usar cut
para dividir os caracteres em que está interessado e, em seguida, sort
e uniq -c
para contar quantas vezes as diferentes datas aparecem:
$ < input cut -c1-6 |sort |uniq -c
3 Jan 2
4 Jan 3
Ou use awk
se você for especial sobre o formato de saída:
$ awk '{a[substr($0, 1, 6)] += 1} END { for (x in a) printf "%s : %d\n", x, a[x] }' < x | sort
Jan 2 : 3
Jan 3 : 4
O primeiro bloco usa um array associativo para contar quantas vezes cada data aparece, o fim do bloco END apenas imprime as datas e suas contagens. sort
a saída depois, já que não há garantia sobre a ordem em que as chaves saem da matriz.