awk + ​​如何在awk中导出值

awk + ​​如何在awk中导出值

我使用以下 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;}'

相关内容