Verifica o número de palavras em um arquivo que contém uma letra específica

1

Comando Bash para verificar o número de palavras em um arquivo que contenha a letra “a”

    
por afsal137 01.08.2015 / 10:01

5 respostas

14

Suponha que tenhamos este arquivo de teste:

$ cat file
the cat in the hat
the quick brown dog
jack splat

Com grep implementações que adotaram a extensão -o do GNU, podemos recuperar todas as palavras que contêm a :

$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file
cat
hat
jack
splat

Podemos contar essas palavras:

$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file | wc -l
4
    
por 01.08.2015 / 10:10
8

POSIXly:

<file tr -s '[:space:]' '[\n*]' | grep -c a

Aqui, palavras são seqüências de caracteres sem espaçamento.

    
por 01.08.2015 / 10:24
5

Aqui está um jeito Perl:

 perl -0lnE 'say scalar grep(/a/,split(/\s/,$_));' file

E um caminho awk :

 awk '{for(i=1;i<=NF;i++){if($(i)~/a/){k++}}}END{print k}' file
    
por 01.08.2015 / 13:18
1

Com o GNU grep:

 grep -oP '\b\w*a+\w*\b' file
    
por 01.08.2015 / 14:45
1
awk 'BEGIN{RS="[[:space:][:punct:]]"; c=0}
     index($0,"a"){c++} 
     END{print c}'

Usando uma versão de awk que suporta eparadores R ecord S de vários caracteres ( RS ), por exemplo. GNU awk, você pode fazer com que awk leia uma palavra por registro.

Dentro desse registro, a função index(in, string) pesquisa in para a primeira ocorrência de string e retorna o < em posição de caractere> 1-based de onde ele é encontrado. Se não for encontrado, index() retornará 0 . Assim, o valor de retorno pode ser tratado como um teste de condição booleano (0 = falso, não zero = verdadeiro). Note que esta não é uma pesquisa de expressão regular.

Se uma correspondência for encontrada, a variável c será incrementada em 1 ( c++ )

O c=0 é necessário no bloco BEGIN{} , para quando c nunca é incrementado - o que faria com que c fosse null em vez de 0 . Outra maneira de lidar com esse problema seria print 0+c (no bloco END{} )

    
por 01.08.2015 / 14:11