awk + como exportar valor no awk

awk + como exportar valor no awk

Eu uso a seguinte linha awk para capturar a máquina remota que usa a porta 2181

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

mas quando eu uso o parâmetro - um que representava o valor do endereço IP no awk parece que um parâmetro não obtém o endereço IP real

 netstat -nape | awk -v a="43.64.56.36"  '{if ($4 == a:2181) print $4, $5 ,$6 ,$9;}'

sem saída

quando estou errado aqui?

Responder1

Seu comando deveria ter causado um erro de sintaxe.

Com GNU awk:

awk: cmd. line:1: {if ($4 == a:2181) print $4, $5 ,$6 ,$9;}
awk: cmd. line:1:             ^ syntax error

Com BSD awk:

awk: syntax error at source line 1
 context is
        {if ($4 == >>>  a: <<<
awk: illegal statement at source line 1

Com mawk:

mawk: line 1: syntax error at or near :

Tudo isso está apontando para o erro de sintaxe em a:2181.

Você está configurando corretamente a awkvariável apara uma string contendo seu número IP, mas se quiser concatenar seu valor para :2181formar uma nova string você teria que usar :2181como string: a ":2181"

Você também deve considerar o uso da forma idiomática de correspondência com a entrada e a execução de uma ação, em vez de usar ifinstruções explícitas:

awk -a="42.54.56.36" '$4 == a ":2181" { print $4, $5, $6, $9 }'

Observe que não há necessidade de terminar uma instrução com ;in awkse não houver mais instruções na mesma linha.

Responder2

nós resolvemos isso pela seguinte sintaxe

netstat -nape | awk -v a="43.64.56.36"  '{if ($4 == a":2181") print $4, $5 ,$6 ,$9;}'

informação relacionada