
포트 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 주소 값을 나타내는 매개변수가 실제 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
.
IP 번호가 포함된 문자열로 awk
변수를 올바르게 설정했지만 해당 값을 연결하여 새 문자열을 형성하려면 문자열로 사용해야 합니다 .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;}'