
Я использую следующую строку 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;}'