Давайте предположим, что у меня есть программа, которая запрашивает много информации. Меня интересуют только 3 сообщения, которые появляются всегда друг за другом. Теперь я хочу выделить эти строки и отделить их от следующих трех сообщений, соответствующих моему шаблону.

Пока что у меня есть следующая командная строка:

./myproc | grep -e "pattern1|pattern2|pattern3" | awk '{print $0,"\n"}'

Однако это производит что-то подобное

line 1

line 2 

line 3

line 1

line 2 

line 3

Но то, что я хочу, должно выглядеть так:

line 1
line 2
line 3

line 1
line 2
line 3

1 ответ1

1

Во-первых, вы не должны и не должны использовать grep, когда передаете выходные данные в awk, потому что awk знает, что знает grep, и даже больше.

Затем, инструкция печати awk (в отличие от printf () в C или print в perl) автоматически печатает новую строку после значения (хотя awk также имеет свой собственный printf, которого нет).

И последнее, если вы просто хотите распечатать всю запись (здесь: строка), вам даже не нужно ее указывать.

Теперь вы должны попробовать это:

./myproc | awk '/pattern1/,/pattern3/ {print}; /pattern3/ {print ""}'

И вы должны прочитать о шаблоне диапазона в man awk.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .