
ポート2181を使用しているリモートマシンをキャプチャするために、次のawk行を使用します。
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;}'