awk + cómo exportar valor en awk

awk + cómo exportar valor en awk

Utilizo la siguiente línea awk para capturar la máquina remota que usa el puerto 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

pero cuando uso el parámetro - a que representa el valor de la dirección IP en el awk parece que un parámetro no obtiene la dirección IP real

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

ninguna salida

cuando me equivoco aquí?

Respuesta1

Su comando debería haberle dado un error de sintaxis.

Con GNU awk:

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

Con BSD awk:

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

Con mawk:

mawk: line 1: syntax error at or near :

Todos estos apuntan al error de sintaxis en a:2181.

Está configurando correctamente la awkvariable aen una cadena que contiene su número de IP, pero si desea concatenar su valor para :2181formar una nueva cadena, tendría que usar :2181como cadena: a ":2181"

También deberías considerar usar la forma idiomática de comparar la entrada y realizar una acción en lugar de usar ifdeclaraciones explícitas:

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

Tenga en cuenta que no es necesario finalizar una declaración con una ;entrada awksi no hay más declaraciones en la misma línea.

Respuesta2

lo solucionamos con la siguiente sintaxis

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

información relacionada