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

Bash 使用awk从dig-x的输出中获取IP地址和名称,bash,awk,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)}'

只是尝试创建一个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
dig-x192.168.1.5
挖掘9.8.3-P1-x 192.168.1.5
全局选项:+cmd
得到答案:

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

您的脚本可以是:

#!/bin/bash

iplist="./hosts.txt"

while read -r ip; do
   printf "%s == %s\n" "$ip" "$(dig +short -x $ip)"
done < "$iplist"
#/bin/bash
iplist=“./hosts.txt”
而read-r-ip;做
printf“%s==%s\n”“$ip”“$(dig+short-x$ip)”
完成<“$iplist”

那比我的漂亮多了。:)因为我在Mac电脑上,开关不工作,所以我不得不把“-i”去掉,但它工作起来很有魅力。谢谢。很抱歉,它应该是
-r
,但在您的情况下,即使这样也不是必需的。