![Usando Awk para imprimir las líneas deseadas de nslookup](https://rvso.com/image/134421/Usando%20Awk%20para%20imprimir%20las%20l%C3%ADneas%20deseadas%20de%20nslookup.png)
Estoy buscando imprimir el nombre y la IP que resultan de un nslookup para poder enviarlos a un archivo.
Cuando ejecuto un nslookup
en 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 dig
en 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 awk
script imprime el primer y último campo delimitado por espacios en blanco de la salida del dig
comando (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 awk
programa intenta obtener la quinta línea de la salida del primer awk
programa, 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.