Use -grep para contar o número de palavras de 6 letras que começam com 'bar' e terminam com 'i' ou 'n'

0

Eu quero contar o número de palavras de seis letras que começam com 'bar' e terminam com 'i' ou 'n'.

Por exemplo, dado este arquivo:

barxxi
barxxc
barxxn
barqwq
barovo

a saída deve ser 2 (inteiro), pois essas linhas correspondem:

barxxi
barxxn

Meu código é o seguinte, mas parece estar errado:

grep -c 'bar??[ni]' /path/file.txt
    
por Ulysses 31.01.2018 / 14:37

3 respostas

0

Use grep -o , que produz apenas o texto correspondente, várias vezes por linha, se necessário.

grep -o '\<bar[^ ][^ ][ni]\>' /path/file.txt | wc -w

Os \< e \> correspondem ao início e ao final de uma palavra. O [^ ] corresponde a um caractere não espacial.

    
por 31.01.2018 / 14:44
0

Substitua seus pontos de interrogação ? pelos períodos . e seu grep deve funcionar, contanto que sua entrada seja de apenas uma palavra por linha.

grep -c 'bar..[ni]' /path/file.txt
    
por 31.01.2018 / 14:47
0
awk '{ for (i=1;i<=NF;i++) if ($i ~ /^bar.*[in]/ || $i ~ /[[:space:]]bar.*[in]/) { count++ }} END { print count }' filename

A solução awk acima também deve funcionar. Tomando em consideração múltiplas entradas em cada linha, o awk procura desde a primeira entrada delimitada por espaço no ficheiro em cada linha até à última entrada (NF) se então o padrão corresponder a expressões regulares com ~ e incrementa uma contagem em conformidade. Duas instruções if são criadas para levar em consideração ou um começo de linha (^) e também barra e espaço e barra. No final, a contagem é impressa na tela.

    
por 31.01.2018 / 14:59

Tags