Usando Awk para imprimir las líneas deseadas de nslookup

Usando Awk para imprimir las líneas deseadas de nslookup

Estoy buscando imprimir el nombre y la IP que resultan de un nslookup para poder enviarlos a un archivo.

Cuando ejecuto un nslookupen un host, obtengo un resultado como este:

Server: 10.10.10.10
Address: 10.10.10.10#53

Name: EXAMPLE.example.com
Address: 10.10.10.100

Quiero generar el nombre y la IP en columnas separadas de un archivo, por lo que mi comando en este momento es este:

nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'

No obtengo nada a pesar de que los awk separados devuelven el valor correcto por sí solos. Me doy cuenta de por qué esto no funciona, pero me pregunto cuál es la sintaxis correcta para imprimir ambos resultados en sus respectivas columnas.

Respuesta1

nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {A=$2}; END {print N,A}'

Imprimirá sólo el apellido y la dirección, pero si los quiere todos:

nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {print N,$2}'

Respuesta2

Usando digen su lugar:

$ dig +noall +answer example.com | awk '{ print $1, $NF }'
example.com. 93.184.216.34

$ dig +noall +answer www.google.com | awk '{ print $1, $NF }'
www.google.com. 172.217.20.36

El awkscript imprime el primer y último campo delimitado por espacios en blanco de la salida del digcomando (la salida sin formato también contiene algunas otras columnas intermedias).


Tu comando:

nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'

Esto no funciona ya que el segundo awkprograma intenta obtener la quinta línea de la salida del primer awkprograma, que solo genera una sola línea.

Algo como esto podría haber funcionado,

$ nslookup example.com | awk 'FNR == 4 || FNR == 5 { print $2 }'
answer:
example.com

pero en mi sistema, como puede ver, los datos deseados están en otras líneas (no en las líneas 4 y 5). Esto puede funcionar mejor para usted.

Respuesta3

nslookup -type=A cdnjs.cloudflare.com | awk '/^Name:/ {c=2;N=$2} !--c {print N,$2}'

que imprimirá todos los registros:

cdnjs.cloudflare.com 104.16.18.94
cdnjs.cloudflare.com 104.16.19.94

A diferencia de otras soluciones, este script sólo coincidirá con la respuesta real y no con la dirección del servidor DNS. No generará nada en caso de falla.

Esto fue inspirado poruna respuesta de esta pregunta.

información relacionada