
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 awk
variável a
para uma string contendo seu número IP, mas se quiser concatenar seu valor para :2181
formar uma nova string você teria que usar :2181
como 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 if
instruçõ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 awk
se 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;}'