Использование Awk для печати нужных строк nslookup

Использование Awk для печати нужных строк nslookup

Я хочу вывести имя и IP-адрес, полученные в результате nslookup, чтобы можно было вывести их в файл.

Когда я запускаю nslookupна хосте, я получаю такой результат:

Server: 10.10.10.10
Address: 10.10.10.10#53

Name: EXAMPLE.example.com
Address: 10.10.10.100

Я хочу вывести имя и IP в отдельные столбцы файла, поэтому моя команда сейчас такая:

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

Я ничего не получаю, хотя отдельные awk возвращают правильное значение сами по себе. Я понимаю, почему это не сработает, но мне интересно, какой синтаксис подойдет для вывода обоих результатов в соответствующие столбцы.

решение1

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

Будут напечатаны только фамилия и адрес, но если вам нужны все:

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

решение2

Вместо этого используйте dig:

$ 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

Скрипт awkвыводит первое и последнее поля, разделенные пробелами, из выходных данных команды dig(необработанные выходные данные также содержат несколько других столбцов между ними).


Ваша команда:

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

Это не работает, поскольку вторая awkпрограмма пытается получить пятую строку из вывода первой awkпрограммы, которая выводит только одну строку.

Что-то вроде этого могло бы сработать,

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

но в моей системе, как вы видите, нужные данные находятся в других строках (не в строках 4 и 5). Это может сработать лучше для вас.

решение3

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

который выведет все записи:

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

В отличие от других решений, этот скрипт будет соответствовать только фактическому ответу, а не адресу DNS-сервера. Он ничего не выведет в случае неудачи.

Это было вдохновленоответ на этот вопрос.

Связанный контент