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 주소 값을 나타내는 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.

awkIP 번호가 포함된 문자열로 변수를 올바르게 설정했지만 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;}'

관련 정보