
Eu tenho um arquivo contendo várias opções e variáveis de inicialização.
lax1-sw0101#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable does not exist
Boot Variables on next reload:
BOOT variable does not exist
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
lax1-sw0101#
lgb1-sw0102#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable does not exist
Boot Variables on next reload:
BOOT variable does not exist
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
lgb1-sw0102#
las-sw0101#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable does not exist
Boot Variables on next reload:
BOOT variable = flash:/cat9k_iosxe.bin;
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
las-sw0101#
Preciso filtrar apenas as opções que possuem as "Variáveis de inicialização na próxima recarga:" como "Variáveis de inicialização não existem" e também imprimir o nome do host
Output:
lax1-sw0101#
Boot Variables on next reload:
BOOT variable does not exist
lgb1-sw0102#
Boot Variables on next reload:
BOOT variable does not exist
Eu tentei algumas soluções awk/sed, como imprimir entre linhas, imprimir a partir da enésima linha, o mais próximo que posso chegar é o semelhante abaixo, mas não consigo imprimir uma linha abaixo
awk '/#/{a=$0}/Boot Variables on next reload/{print a"\n"$0}'
Responder1
Como você sabe o que está procurando, sugiro apenas imprimir os nomes correspondentes com uma máquina de estado awk:
awk '/^Boot Variables on next reload:$/ { p=1 }
/^BOOT variable does not exist$/ && 1==p { p=2 }
/#$/ { if (2 == p) print; p=0; }'
input
Isso apenas usa um valor de sinalizador, p
para indicar se vimos pela primeira vez Boot Variables on next reload:
,entãovisto BOOT variable does not exist
; quando vemos uma linha com a #
no final da linha, verificamos o valor do sinalizador atual; somente se o valor for 2, imprima essa linha (nome do host). Independentemente disso, redefinimos o estado de volta ao início.
Se você precisar imprimir o texto estático, será uma adição fácil à print
instrução.