
		paulo1205
		
		(usa Ubuntu)
		
		Enviado em 17/02/2020 - 17:09h 
		A solução do msoliver funciona.  Contudo, acho importante notar que ela tem complexidade quadrática (no pior caso, um arquivo com N linhas vai ser inteiramente processado N vezes) e produz uma saída que altera a ordem dos elementos, o que pode até ser aceitável, mas não corresponde ao exemplo de saída mostrado pelo OP.
Uma forma mais otimizada de fazer é fazer numa passada só, e usar o recurso de 
array associativo do 
bash ou 
ksh para verificar se uma palavra nova existe e então recuperar o valor inteiro associado, ou associar-lhe um valor inteiro novo, caso ainda não exista.  A principal vantagem de fazer desse modo é que a complexidade do algoritmo passa de quadrática para essencialmente linear (assumindo que o 
array associativo tem complexidade constante, o que costuma ser aproximadamente verdadeiro quando são implementados com tabelas 
hash).  Por outro lado, como o 
shell usa seus 
arrays associativos exclusivamente em memória, um arquivo de entrada excessivamente grande poderia provocar esgotamento de recursos.
Não vou colocar aqui nenhum exemplo porque não sei se a pergunta se refere a trabalho escolar.  Contudo, para aprender a usar 
arrays associativos, a documentação do Bash é mais do que suficiente, e existem exemplos de uso aqui mesmo, nesta comunidade do fórum.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)