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