awk从nslookup输出中获取IP和名称

时间:2018-08-09 07:33:37

标签: awk

我有一个File1.txt文件,并拥有一些IP地址。

192.168.1.2
192.168.1.3
192.168.1.4

通常,当我们以前使用nslookup时,它会通过DNS为该IP提供名称解析,如下所示。

# nslookup 192.168.1.2
Server:         192.168.1.1
Address:        192.168.1.1#53

2.1.168.192.in-addr.arpa      name = rob.example.com.

我们看到上面的输出提供了很多信息,但是我希望仅针对给定IP捕获名称,因此使用awk来获得所需的结果。

我在下面有一个针对IP列表的for循环,它只是获取名称。

cat File1.txt`;do nslookup $i | awk '/name/{print $4}';done

rob.example.com
tom.example.com
tony.example.com

是否有可能需要一个衬里来获得IP地址和名称,而无需写入脚本文件就可以打印出来。

192.168.1.2  rob.example.com
192.168.1.3  tom.example.com
192.168.1.4  tony.example.com

尽管这里有bash解决方案。

#!/bin/bash

iplist="File1.txt"

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

2 个答案:

答案 0 :(得分:1)

编辑: :如果OP的Input_file中包含IP,则以下操作可能会对您有所帮助。

while read ip
do
    nslookup "$ip" | awk -v ip="$ip" '/name/{print substr($NF,1,length($NF)-1),ip}'
done < "Input_file"

说明: :这仅出于解释目的,对于运行代码,请仅使用以上代码。

while read ip
    ##Starting a while loop which will read OP's Input_file which will have IPs in it. ip is the variable which has its value.
do
    nslookup "$ip" | awk -v ip="$ip" '/name/{print substr($NF,1,length($NF)-1),ip}'  
    ##using nslookup and passing variable ip value to it, to get specific IPs server name and passing it to awk then.
    ##In awk command setting up a variable named ip whose value is shell variable ip value and then checking if a line is having name in it if yes then printing the last column value leaving last DOT. 
done < "Input_file"
    ##Mentioning Input_file name here which should be passed.


请尝试以下操作。(考虑到您的Input_file上有服务器名称)

while read ip
do
   nslookup "$ip" |  awk '/Name:/{val=$NF;flag=1;next} /Address:/ && flag{print $NF,val;val=""}'
done < "Input_file"

答案 1 :(得分:0)

啊!在通过awk手册时,它非常简单,我用awk变量得到它,即直接。

$ for i in `cat File1.txt`;do nslookup $i | awk -v var=$i  '/name/{print var "\t", $4}';done

192.168.1.2  rob.example.com
192.168.1.3  tom.example.com
192.168.1.4  tony.example.com