
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 awk
variable a
en una cadena que contiene su número de IP, pero si desea concatenar su valor para :2181
formar una nueva cadena, tendría que usar :2181
como 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 if
declaraciones 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 awk
si 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;}'