Como encontrar a palavra mais frequente de cada arquivo em um diretório?

5

Eu preciso encontrar a palavra mais frequente de cada arquivo em um diretório e imprimi-lo assim:

12 my /home/test/file1.txt
5 you /home/test/file3.txt
7 hello /home/test/file4.txt

Eu tentei:

for tmp in <path> 
    do
   tr -c '[:alnum:]' '[\n*]' < "$tmp" | sort | uniq -c | sort -nr | head  -1 
   done   

Não funciona

    
por Mor123 11.11.2015 / 14:53

1 resposta

4

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
    
por 11.11.2015 / 15:14