First of all you have to use
sort command before using
uniq -c because this command fails if you have another repeated characters after other characters like input:
And second problem you get wrong result because you convert all uppercase to lowercase, it cause you getting result in lowercase.
Also you don't need
's/ *$//' part of sed because your output has no spaces on end of lines.
You should try with your modified command as this:
tr a-z A-Z <file |sort | uniq -c | sed 's/^ *//'
Or even shorter try:
sort -r file |uniq -ci
sort with its
-r option sorts Uppercase character as first rows. and with
uniq and its
-i option ignores differences in case.