![Awk를 사용하여 원하는 nslookup 행 인쇄](https://rvso.com/image/134421/Awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9B%90%ED%95%98%EB%8A%94%20nslookup%20%ED%96%89%20%EC%9D%B8%EC%87%84.png)
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 서버 주소가 아닌 실제 답변과만 일치합니다. 실패하면 아무 것도 출력되지 않습니다.
이것은 다음에서 영감을 얻었습니다.이 질문에 대한 답변.