我希望打印 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 服务器地址。如果失败,它不会输出任何内容。
这是受到启发的这个问题的答案。