Подсчитайте количество слов, используемых в ответе после вопросительной строки

Пример ввода:

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

Пример вывода:

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

Единственными маркерами являются« Questionx: »и«? ». Ответы всегда следуют за вопросами. Это кричит awk для меня (find /? $ /), но я не могу заставить многострочный аспект хорошо играть с подсчетом слов ($ NF). Доступны другие языки, такие как perl / python / php и т. д., но Я стараюсь избегать программирования того, что, как мне кажется, должно быть простым однострочником

0
01.02.2017, 23:09
2 ответа

Это даст количество «слов» в каждом вопросе отдельно:

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

Чтобы напечатать вопросы и количество слов в каждой строке, как вы описываете:

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

Чтобы сделать числовой префикс каждой строки кумулятивным:

awk '/^Question/ {words=0; print} $0 !~ /^Question/ {words+=NF; print words, $0}' /path/to/input
0
28.01.2020, 02:34

В ожидании ответа на мой комментарий выше:

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

или

awk '{printf "%s%s\n", (/^Question[0-9]+:.*\?$/ ? "" : NF " "), $0}'
2
28.01.2020, 02:34

Теги

Похожие вопросы