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;}'

相關內容