Usando o Awk para imprimir as linhas desejadas do nslookup

Usando o Awk para imprimir as linhas desejadas do nslookup

Estou tentando imprimir o nome e o IP resultantes de um nslookup para que possa enviá-los para um arquivo.

Quando executo nslookupum host, obtenho um resultado como este:

Server: 10.10.10.10
Address: 10.10.10.10#53

Name: EXAMPLE.example.com
Address: 10.10.10.100

Quero gerar o nome e o IP em colunas separadas de um arquivo, então meu comando agora é este:

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

Não estou recebendo nada, mesmo que os awk separados retornem o valor correto por conta própria. Entendo por que isso não funciona, mas estou me perguntando qual é a sintaxe correta para imprimir esses dois resultados em suas respectivas colunas.

Responder1

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

Irá imprimir apenas o sobrenome e endereço, mas se quiser todos:

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

Responder2

Usando digem vez disso:

$ 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

O awkscript imprime o primeiro e o último campo delimitado por espaços em branco da saída do digcomando (a saída bruta também contém algumas outras colunas entre elas).


Seu comando:

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

Isso não funciona porque o segundo awkprograma está tentando obter a quinta linha da saída do primeiro awkprograma, que gera apenas uma única linha.

Algo assim poderia ter funcionado,

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

mas no meu sistema, como você pode ver, os dados desejados estão em outras linhas (não nas linhas 4 e 5). Isso pode funcionar melhor para você.

Responder3

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

que imprimirá todos os registros:

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

Ao contrário de outras soluções, este script corresponderá apenas à resposta real e não ao endereço do servidor DNS. Não produzirá nada em caso de falha.

Isto foi inspirado emuma resposta desta pergunta.

informação relacionada