使用 awk 打印 nslookup 所需的行

使用 awk 打印 nslookup 所需的行

我希望打印 nslookup 生成的名称和 IP,以便将它们输出到文件中。

当我在主机上运行时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 服务器地址。如果失败,它不会输出任何内容。

这是受到启发的这个问题的答案

相关内容