Eu usaria grep com -o para imprimir apenas a parte superior da string correspondente extrair as palavras:
$ for file in *; do
printf '%s : %s\n' "$(grep -Eo '[[:alnum:]]+' "$file" | sort | uniq -c |
sort -rn | head -n1)" "$file"
done
8 no : file1
10 so : file2
12 in : file3
Como alternativa, se o grep não der suporte a -o , você poderá usar tr para substituir todos os caracteres de espaço em branco e pontuação por \n , filtrar por grep . para pular linhas em branco e contar:
$ for file in *; do
printf '%s : %s\n' "$(tr '[[:punct:]][[:space:]]' '\n' < "$file" | grep . |
sort | uniq -c | sort -rn | head -n1)" "$file"
done
8 no : file1
10 so : file2
12 in : file3