Поиск шаблона с использованием awk и распечатка следующих 15 строк из файла журнала
Поиск шаблона с использованием awk и распечатка следующих 15 строк из файла журнала
awk '/^DERAT1SB[0-9][0-9]# show registration/{nr[NR]; nr[NR+4]}; NR in nr' slb.log
Я использую приведенную выше команду для поиска шаблона DERAT1SB23# show registration
внутри файла журнала, но он выдает синтаксическую ошибку.
ОШИБКА:
awk: syntax error near line 1
awk: bailing out near line 1
3 ответа
Из Эффективного программирования Awk, Выпуск 4:
Роза под любым другим именем Язык awk развивался годами. Полная информация представлена в Приложении A [Развитие языка awk], стр. 439. Язык, описанный в этой книге, часто называют "новым awk". По аналогии, оригинальная версия awk называется "старый awk".
В большинстве современных систем, когда вы запускаете утилиту awk, вы получаете новую версию awk.4 Если стандартный awk вашей системы старый, вы увидите что-то вроде этого, если попробуете тестовую программу:
$ awk 1 /dev/null error awk: syntax error near line 1 error awk: bailing out near line 1
В этом случае вы должны найти версию нового awk или просто установить gawk!
В этой книге всякий раз, когда мы ссылаемся на языковую функцию, которая должна быть доступна в любой полной реализации POSIX awk, мы просто используем термин awk. При ссылке на особенность, специфичную для реализации GNU, мы используем термин gawk.
4 Только системы Solaris все еще используют старый awk для> утилиты awk по умолчанию. Более современный awk живет в
/usr/xpg6/bin
на этих системах.
awk: выручать возле линии 1
Это известная проблема, и вы должны изменить свой код в системе Solaris/SunOS, изменить awk
в /usr/xpg4/bin/awk
, /usr/xpg6/bin/awk
, или же nawk
Найдите шаблон и напечатайте следующие 15 строк: используя GNU sed
sed -n '/pattern/,+15 p' file
С простым awk:
awk '
/pattern/ {
print
for (i=1; i<=15; i++) {getline; print}
exit
}
' file