![Usando o Awk para imprimir as linhas desejadas do nslookup](https://rvso.com/image/134421/Usando%20o%20Awk%20para%20imprimir%20as%20linhas%20desejadas%20do%20nslookup.png)
Estou tentando imprimir o nome e o IP resultantes de um nslookup para que possa enviá-los para um arquivo.
Quando executo nslookup
um 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 dig
em 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 awk
script imprime o primeiro e o último campo delimitado por espaços em branco da saída do dig
comando (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 awk
programa está tentando obter a quinta linha da saída do primeiro awk
programa, 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.