Como criar uma lista de frequência de cada palavra em um arquivo?

Eu tenho um arquivo como este:

<code>This is a file with many words.
Some of the words appear more than once.
Some of the words only appear one time.
</code>

Eu gostaria de gerar uma lista de duas colunas. A primeira coluna mostra quais palavras aparecem, a segunda coluna mostra com que frequência elas aparecem, por exemplo:

<code>this@1
is@1
a@1
file@1
with@1
many@1
words3
some@2
of@2
the@2
only@1
appear@2
more@1
than@1
one@1
once@1
time@1 
</code>
Para simplificar o trabalho, antes de processar a lista, removerei toda a pontuação e alterarei todo o texto para letras minúsculas.A menos que haja uma solução simples em torno disso,words eword pode contar como duas palavras separadas.

Até agora, eu tenho isso:

<code>sed -i "s/ /\n/g" ./file1.txt # put all words on a new line
while read line
do
     count="$(grep -c $line file1.txt)"
     echo $line"@"$count >> file2.txt # add word and frequency to file
done < ./file1.txt
sort -u -d # remove duplicate lines
</code>

Por algum motivo, isso só mostra "0" após cada palavra.

Como posso gerar uma lista de todas as palavras que aparecem em um arquivo, juntamente com informações de frequência?

questionAnswers(10)

yourAnswerToTheQuestion