Поиск шаблона с использованием 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
Другие вопросы по тегам