我使用以下 awk 行来捕获使用端口 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
但是当我在 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
。
awk
您正确地将变量设置a
为包含您的 IP 号码的字符串,但如果您想将其值连接起来:2181
形成一个新字符串,则必须将其用作:2181
字符串: a ":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;}'