awk + ​​awk で値をエクスポートする方法

awk + ​​awk で値をエクスポートする方法

ポート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変数をaIP 番号を含む文字列に正しく設定していますが、その値を連結して新しい文字列を形成する場合は、文字列として :2181使用する必要があります。:2181a ":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;}'

関連情報