Classificar primeiro a entrada é o mais eficiente possível.
Você pode fazer isso com um one-liner awk:
awk '{++seen[$0]} END {for (line in count) printf "%7d %s\n", count[line], line}'
Qual deles é mais eficiente (em memória e tempo de CPU) depende dos dados e da implementação. sort
é menos eficiente em teoria porque faz um trabalho extra, mas por outro lado tem um trabalho e o faz bem, enquanto o awk é uma ferramenta de propósito geral. Se houver muitas duplicatas, o awk usa menos memória e é provavelmente um pouco mais rápido. Por outro lado, muitas implementações de ordenação podem lidar com grandes conjuntos de dados que não se encaixam na RAM, enquanto o awk apenas irá debater.