使用 awk 列印 nslookup 所需的行

使用 awk 列印 nslookup 所需的行

我希望列印 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 自己返回正確的值,我也什麼也沒得到。我意識到為什麼這行不通,但我想知道將這兩個結果列印到各自列中的正確語法。

答案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}'

這不起作用,因為第二個awk程式試圖從第一個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 伺服器位址。如果失敗,它不會輸出任何內容。

這是受到啟發的這個問題的答案

相關內容