2017-06-27 11 views

答えて

1

あなたはこのようawkを使用することができます。

dig @8.8.8.8 www.example.com | awk '/ANSWER:/{print $2}' RS=, 

ここで重要なのは、入力レコードセパレータとして,使用することです。 RS=,を使用するときに入力レコードがawkに表示する方法を見て:

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @8.8.8.8 www.example.com 
; (1 server found) 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY 
status: NOERROR 
id: 49711 
;; flags: qr rd ra ad; QUERY: 1 
ANSWER: 1  <----- Look here! The ANSWER: is a separate record 
AUTHORITY: 0 
ADDITIONAL: 1 

;; OPT PSEUDOSECTION: 
; EDNS: version: 0 
flags:; udp: 512 
;; QUESTION SECTION: 
;www.example.com.  IN A 

;; ANSWER SECTION: 
www.example.com. 74953 IN A 93.184.216.34 

;; Query time: 43 msec 
;; SERVER: 8.8.8.8#53(8.8.8.8) 
;; WHEN: Tue Jun 27 03:40:13 CEST 2017 
;; MSG SIZE rcvd: 60 

ANSWER: Nセクションでは、別のレコードです。今度は、/ANSWER:/レコードを正規表現でフィルタリングし、print $2を使ってその行の2番目の列を印刷するだけです。


PS:sed選択肢は次のようになります。

dig @8.8.8.8 www.example.com | sed -rn '/(.*ANSWER:)([0-9]+)(.*)/s//\2/p' 
2

awkを使用してください。列をループし、ANSWER:で列を見つけて、列の次の列を印刷することができます。

var=$(dig @example.com hostname.example.com | 
    awk '/ANSWER/ { for (i = 1; i < NF-1; i++) if ($i == "ANSWER:") { print $(i+1); break } }' 
+0

あなたは 'それは驚くほど単純なことができ、' 'にRS'を変更した場合。 :) 'awk '/ ANSWER:/ {print $ 2}' RS =、' – hek2mgl

関連する問題