使用awk从dig -x的输出中获取IP地址和名称

时间:2016-12-05 18:44:33

标签: bash awk

只是尝试创建一个bash脚本,它将在文件中列出IP列表,然后对每个文件运行'dig -x',然后使用awk只获取它返回的IP和主机名并将其转换为新的文件。

所以IP列表是hosts.txt,到目前为止我有:

#!/bin/bash
IPLIST="./hosts.txt"

for IP in $( cat $IPLIST ); do
dig -x $IP | awk 'match($0, /192.168.*/) 
{print substr($0, RSTART, RLENGTH)}'

这样可以很好地从dig输出中获取IP地址,但我不太确定如何获取第二个搜索词,然后将其吐出来,所以它基本上是:

192.168.1.5 == hostname.domain.com

dig命令的原始输出是:

dig -x 192.168.1.5
<<>> DiG 9.8.3-P1 <<>> -x 192.168.1.5
global options: +cmd
Got answer:
->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22854
flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

QUESTION SECTION: 
5.1.168.192.in-addr.arpa.   IN  PTR

AUTHORITY SECTION:
168.192.in-addr.arpa.   300 IN  SOA hostname.domain.com.     
hostmaster.domain.com. 1117231 10800 3600 2419200 300

Query time: 3 msec
SERVER: 10.168.1.20#53(10.168.1.20)
WHEN: Mon Dec  5 13:38:13 2016
MSG SIZE  rcvd: 118

任何人都可以告诉我如何调整这个以便我可以使用我在同一行上使用主机名的IP来格式化输出吗?

1 个答案:

答案 0 :(得分:0)

无需使用解析此输出,因为您可以使用dig +short来获取输出中的主机名。

您的脚本可以只是:

#!/bin/bash

iplist="./hosts.txt"

while read -r ip; do
   printf "%s == %s\n" "$ip" "$(dig +short -x $ip)"
done < "$iplist"