Contar o número de palavras usadas em uma resposta, seguindo uma linha de pergunta

0

Exemplo de entrada:

Question1: What kind of cake do you like?
Anything with sprinkles

Exemplo de saída:

Question1: What kind of cake do you like?
3 Anything with sprinkles

Os únicos marcadores são o "Questionx:" e o "?". Respostas sempre seguem as perguntas. Isso grita awk para mim, (find /? $ /), Mas não consigo fazer com que o aspecto multi-line funcione bem com a contagem de palavras ($ NF). Outras linguagens estão disponíveis, como perl / python / php, etc. mas eu estou tentando evitar programar o que eu sinto que deveria ser um simples liner

    
por Kalak 01.02.2017 / 21:55

2 respostas

2

Aguardando a resposta ao meu comentário acima:

awk '/^Question[0-9]+:.*\?$/ {print; next} {print NF, $0}'

ou

awk '{printf "%s%s\n", (/^Question[0-9]+:.*\?$/ ? "" : NF " "), $0}'
    
por 01.02.2017 / 22:16
0

Isso fornecerá o número de "palavras" em cada pergunta:

awk '/^Question/ {if (NR > 0) print words; words=0} $0 !~ /^Question/ {words+=NF}' /path/to/input

Para imprimir perguntas e o número de palavras em cada linha, conforme você descreve:

awk '/^Question/ {print} $0 !~ /^Question/ {print NF, $0}' /path/to/input

Para tornar o prefixo numérico de cada linha cumulativo:

awk '/^Question/ {words=0; print} $0 !~ /^Question/ {words+=NF; print words, $0}' /path/to/input
    
por 01.02.2017 / 21:59