我有一个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"
答案 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