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

이것은 다음에서 영감을 얻었습니다.이 질문에 대한 답변.

관련 정보