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

awkIP番号を含む文字列で変数を正しく設定しましたが、aその値を連結して新しい文字列を形成するには、その値を文字列 :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;}'

関連情報