
Tengo un archivo que contiene varios modificadores y las variables de arranque.
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#
Necesito filtrar solo los conmutadores que tienen las "Variables de arranque en la próxima recarga:" como "Las variables de arranque no existen", y también imprimir el nombre del 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
He probado algunas soluciones awk/sed como imprimir entre líneas, imprimir desde la enésima línea, lo más cerca que puedo llegar es la similar a la siguiente, pero no puedo imprimir una línea a continuación
awk '/#/{a=$0}/Boot Variables on next reload/{print a"\n"$0}'
Respuesta1
Como sabes lo que estás buscando, te sugiero que simplemente imprimas los nombres correspondientes con una 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
Esto simplemente usa un valor de bandera, p
para indicar si lo hemos visto por primera vez Boot Variables on next reload:
.entoncesvisto BOOT variable does not exist
; cuando vemos una línea con a #
al final de la línea, verificamos el valor de la bandera actual; solo si el valor es 2, imprima esa línea (nombre de host). De todos modos, luego restablecemos el estado al principio.
Si necesita imprimir el texto estático, es una adición fácil a la print
declaración.