Primeiro de tudo você tem que usar o comando sort
antes de usar uniq -c
porque este comando falha se você tiver outros caracteres repetidos depois de outros caracteres como entrada:
a
A
b
c
A
a
a
E o segundo problema é que você obtém resultado errado porque converte todas as letras maiúsculas em minúsculas, porque você obtém resultados em letras minúsculas.
Além disso, você não precisa de 's/ *$//'
parte do sed porque sua saída não possui espaços no final das linhas.
Você deve tentar com seu comando modificado como este:
tr a-z A-Z <file |sort | uniq -c | sed 's/^ *//'
Ou tente ainda mais curto:
sort -r file |uniq -ci
sort
com sua opção -r
classifica caracteres maiúsculos como primeiras linhas. e com uniq
e sua opção -i
ignora diferenças no caso.