
nslookupで生成された名前とIPを印刷してファイルに出力したいです。
ホストで実行すると、nslookup
次の結果が表示されます。
Server: 10.10.10.10
Address: 10.10.10.10#53
Name: EXAMPLE.example.com
Address: 10.10.10.100
名前とIPをファイルの別々の列に出力したいので、現在のコマンドは次のようになります。
nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'
awkだけでは正しい値を返しても何も得られません。これがうまくいかない理由を知っていますが、これら2つの結果をその列に印刷する正しい構文を知りたいです。
答え1
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {A=$2}; END {print N,A}'
パフォーマンスアドレスのみを印刷しますが、すべてを希望する場合:
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {print N,$2}'
答え2
代わりに使用してくださいdig
:
$ dig +noall +answer example.com | awk '{ print $1, $NF }'
example.com. 93.184.216.34
$ dig +noall +answer www.google.com | awk '{ print $1, $NF }'
www.google.com. 172.217.20.36
スクリプトawk
は、コマンド出力の最初と最後のスペースで区切られたフィールドを印刷しますdig
(元の出力にはその間に他の列も含まれています)。
あなたの命令:
nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'
これは、2番目のプログラムが1行だけを出力する最初のawk
プログラムの出力から5行目を取得しようとするため、機能しません。awk
このように動作することもできます。
$ nslookup example.com | awk 'FNR == 4 || FNR == 5 { print $2 }'
answer:
example.com
しかし、私のシステムでは、見てわかるように、必要なデータは別の行(4行と5行ではありません)にあります。これはあなたにとってより効果的かもしれません。
答え3
nslookup -type=A cdnjs.cloudflare.com | awk '/^Name:/ {c=2;N=$2} !--c {print N,$2}'
これにより、すべてのレコードが印刷されます。
cdnjs.cloudflare.com 104.16.18.94
cdnjs.cloudflare.com 104.16.19.94
他の解決策とは異なり、このスクリプトはDNSサーバーアドレスではなく実際の回答のみと一致します。失敗した場合は何も出力されません。
これはインスピレーションを受けました。この質問に対する答え。