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 서버 주소가 아닌 실제 답변만 일치합니다. 실패하면 아무것도 출력되지 않습니다.

이건 영감을 받은 거야이 질문에 대한 대답.

관련 정보