Isso é lição de casa? Caso contrário, use apenas sort
e uniq
:
$ sort file | uniq -c
3 AAA
5 BBB
3 CCC
2 DDD
Se você precisar fazer o script sozinho por algum motivo, você pode usar o Perl:
$ perl -lne '$k{$_}++; END{print "$_\t$k{$_}" for keys(%k)}'
CCC 3
BBB 5
DDD 2
AAA 3
Se você realmente precisa usar um script de shell, você pode fazer (aqui bash
ou ksh
syntax):
unset num;
typeset -A num;
while IFS= read -r line; do
((num[$line]++))
done < file
for line in "${!num[@]}"; do
printf '%s\t%s\n' "$line" "${num[$line]}"
done