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

но когда я использую параметр -a, который представляет значение IP-адреса в awk, кажется, что параметр не получает реальный 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;}'

Связанный контент