Como contar a frequência de uma palavra 20

1

Usando exclusivamente o AWK, preciso contar a ocorrência de uma palavra somente quando tiver mais de 20 caracteres. Eu já encontrei o caminho para contar a frequência de uma palavra, mas tenho alguns problemas em configurar este parâmetro.

Em um segundo momento, eu gostaria de subpor estas palavras com sinônimos que eu vou definir, mas pular uma palavra.

Quero dizer: Se "hello" tiver 30 ocorrências, eu gostaria de subpor o 2nd , 4th , 6th e assim por diante com "hi", em vez disso, 1st , 3rd , ... ainda são "hello" .

Isso é o que eu fiz:

BEGIN { FS="[^a-zA-Z]+" } {
     for (i=1; i<=NF; i++) {
         word = tolower($i)
         words[word]++
     }
 }
 END {
     for (w in words)
          printf("%3d %s\n", words[w], w)
 } 
    
por ettore 29.06.2015 / 10:10

1 resposta

0

Você quer dizer:

BEGIN { flag=0; FS="[^a-zA-Z]+" } {
     for (i=1; i<=NF; i++) {
         word = tolower($i)
         if ($0 ~ /hello/ ) {
             if (flag) {
                 sub ("hello", "hi", word );
             }
            flag= !flag
         }
         words[word]++
     }
 }
END {
        for (w in words)
           printf("%3d %s\n", words[w], w)
    }

O que isso faz é definir um flag para 0 na inicialização do programa awk .

Dentro da iteração do arquivo, ele verifica hello na string de entrada, se hello for encontrado, verificará o estado de flag . Se flag for 0 , não altere hello para hi .

Em seguida, alterne o valor de flag (0 = > 1, 1 = > 0).

Na próxima ocorrência hello , o valor flag será 1 e a substituição de hello a hi será feita.

    
por 29.06.2015 / 11:59