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

しかし、私が本当に必要としているのは、1 行に IP と ns レコードがあり、次の行に ns レコードがあるリストの次の IP です。その後、次のように。

どんな助けでも大歓迎です!

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 はサブシェルを作成しません。

例: 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 に答える