포트 2181을 사용하여 원격 시스템을 캡처하려면 다음 awk 라인을 사용합니다.
netstat -nape | awk '{if ($4 == "43.64.56.36:2181") print $4, $5 ,$6 ,$9;}'
43.64.56.36:2181 43.64.56.60:40151 ESTABLISHED 9027/java
그런데 awk에서 IP 주소 값을 나타내는 a 매개변수를 사용하면 해당 매개변수가 실제 IP 주소를 가져올 수 없는 것 같습니다.
netstat -nape | awk -v a="43.64.56.36" '{if ($4 == a:2181) print $4, $5 ,$6 ,$9;}'
출력 없음
내가 언제 여기서 잘못됐나요?
답변1
명령을 실행하면 구문 오류가 발생합니다.
GNU 사용 awk
:
awk: cmd. line:1: {if ($4 == a:2181) print $4, $5 ,$6 ,$9;}
awk: cmd. line:1: ^ syntax error
BSD 사용 awk
:
awk: syntax error at source line 1
context is
{if ($4 == >>> a: <<<
awk: illegal statement at source line 1
그리고 mawk
:
mawk: line 1: syntax error at or near :
이들 모두는 구문 오류를 가리킵니다 a:2181
.
awk
IP 번호가 포함된 문자열로 변수를 올바르게 설정했지만 a
해당 값을 연결하여 새 문자열을 형성하려면 해당 값을 문자열 :2181
로 사용해야 합니다 .:2181
a ":2181"
또한 명시적인 문을 사용하는 대신 입력을 일치시키고 작업을 수행하는 관용적 방법을 사용하는 것도 고려해야 합니다 if
.
awk -a="42.54.56.36" '$4 == a ":2181" { print $4, $5, $6, $9 }'
같은 줄에 다른 명령문이 없으면 in으로 명령문을 끝낼 필요가 없습니다 ;
.awk
답변2
다음 구문으로 해결했습니다.
netstat -nape | awk -v a="43.64.56.36" '{if ($4 == a":2181") print $4, $5 ,$6 ,$9;}'