¿Cómo crear una lista de frecuencias de cada palabra en un archivo?

Tengo un archivo 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>

Me gustaría generar una lista de dos columnas. La primera columna muestra qué palabras aparecen, la segunda columna muestra con qué frecuencia aparecen, por ejemplo:

<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 hacer este trabajo más simple, antes de procesar la lista, eliminaré toda puntuación y cambiaré todo el texto a letras minúsculas.A menos que haya una solución simple a su alrededor,words yword Puede contar como dos palabras separadas.

Hasta ahora, tengo esto:

<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 alguna razón, esto solo muestra "0" después de cada palabra.

¿Cómo puedo generar una lista de cada palabra que aparece en un archivo, junto con la información de frecuencia?

Respuestas a la pregunta(10)

Su respuesta a la pregunta