Пробуждение линий после матча с getline - PullRequest
0 голосов
/ 29 февраля 2012

Что с этим не так?

for i in {0..16};do 
awk '/foo/ {while (getline > 0); print $0}' ${array[$i]} >> lines.txt;done

Я думал, что «выражение« getline> 0 »будет истинным до тех пор, пока getline успешно читает строку ввода. Когда оно достигает конца файла, getline возвращает 0 и цикл завершается».

Я хочу распечатать каждую строку после строки, содержащей "foo". Я получаю что-то похожее на то, что я хочу, с линиями выше, но это не правильно.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Вынь точку с запятой.

awk '/foo/ { while(getline > 0) { print }}'

Или

awk 'p; /foo/{p=1}'
0 голосов
/ 29 февраля 2012

это ваша команда:

awk '/foo/ {while (getline > 0); print $0}'

Я думаю, что только напечатает последнюю строку входного файла. так как у вас есть ";" после того как время (..), так что он заставил while (..) извлекать каждую строку (без печати) до конца, а затем вывести $ 0, чтобы распечатать ее (последнюю строку).

кстати, было бы более легкое решение для вашей работы. например, * +1008 *

awk '/foo/{o=1}o'
...