awk + awk에서 값을 내보내는 방법

awk + awk에서 값을 내보내는 방법

포트 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:2181a ":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;}'

관련 정보