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{}
)