1

dig +trace -x我在一个名为“ips”的文件中拥有我想要的所有 IP 。

我只想查看 IP 的 ns1(和/或)ns2 记录,并将 IP 和 ns1 或 ns2 记录输出在同一行,如下所示:

1 - $IP - $NS
2 - $IP - $NS
etc.

现在,我只有一个我称之为“digdug”的脚本,它看起来像这样......

for i in `cat ips`
do
dig +trace -x $i | tail -n7
done

然后我可以通过运行看到它正在挖掘的 IP:bash -x digdug

但是,我真正需要的是 IP 和 ns 记录在一行,然后列表中的下一个 IP 和 ns 记录在下一行。然后下一个以此类推。

任何帮助是极大的赞赏!

4

2 回答 2

1

bash 4 中的另一个解决方案:

while read ip; do
    while read ns; do
       echo -e "$ip\t$ns";
    done < <(dig +trace -x $ip | grep -i "ns[12]")
done < ips

我更喜欢使用,while TEST; do CMD; done < file因为它没有分叉子外壳。

< <(cmd)是用于功能替换。与<重定向一样,bash 不会创建子 shell。

例如,这是 google IP (173.164.67.9[1-5]) 的结果:

173.194.67.91   194.173.in-addr.arpa.   86400   IN      NS      NS1.GOOGLE.COM.
173.194.67.91   194.173.in-addr.arpa.   86400   IN      NS      NS2.GOOGLE.COM.
173.194.67.92   194.173.in-addr.arpa.   86400   IN      NS      NS2.GOOGLE.COM.
173.194.67.92   194.173.in-addr.arpa.   86400   IN      NS      NS1.GOOGLE.COM.
173.194.67.92   67.194.173.in-addr.arpa. 60     IN      SOA     ns1.google.com. dns-admin.google.com. 1497777 21600 3600 1209600 10800
173.194.67.93   194.173.in-addr.arpa.   86400   IN      NS      NS2.GOOGLE.COM.
173.194.67.93   194.173.in-addr.arpa.   86400   IN      NS      NS1.GOOGLE.COM.
173.194.67.94   194.173.in-addr.arpa.   86400   IN      NS      NS2.GOOGLE.COM.
173.194.67.94   194.173.in-addr.arpa.   86400   IN      NS      NS1.GOOGLE.COM.
173.194.67.95   194.173.in-addr.arpa.   86400   IN      NS      NS1.GOOGLE.COM.
173.194.67.95   194.173.in-addr.arpa.   86400   IN      NS      NS2.GOOGLE.COM.

希望这会有所帮助

于 2012-09-18T20:28:08.683 回答
0

也许是这样的?

for ip in `cat ips`; do
  ns=`dig +trace -x $ip | tail -n7 | awk '/NS/ {print $NF}'`
  echo "$ip - $ns" | tr '\n' ' '
  echo ""
done
于 2012-09-18T19:32:45.093 回答