スラッシュ付きawkとパターン

スラッシュ付きawkとパターン

入力データには次の行が含まれます。

Network:   10.1.0.0/24          00001010.00000001.00000000. 00000000
Network:   10.1.1.0/24          00001010.00000001.00000001. 00000000
Network:   10.1.2.0/24          00001010.00000001.00000010. 00000000
Network:   10.1.3.0/24          00001010.00000001.00000011. 00000000
Network:   10.1.4.0/24          00001010.00000001.00000100. 00000000
Network:   10.1.5.0/24          00001010.00000001.00000101. 00000000
Network:   10.1.6.0/24          00001010.00000001.00000110. 00000000
Network:   10.1.7.0/24          00001010.00000001.00000111. 00000000

$2列の出力を得るためにawkを使いたいです。私が試したことは何も返しません。

$ ipcalc 10.1.1.0/21 /24|gawk '$1~/^Network:.+\/24[[:space:]]+/{print $2}'

grepで正規表現を使用すると正常に動作します。

$ ipcalc 10.1.1.0/21 /24|grep -E "^Network:.+\/24[[:space:]]+"
Network:   10.1.0.0/24          00001010.00000001.00000000. 00000000
Network:   10.1.1.0/24          00001010.00000001.00000001. 00000000
Network:   10.1.2.0/24          00001010.00000001.00000010. 00000000
Network:   10.1.3.0/24          00001010.00000001.00000011. 00000000
Network:   10.1.4.0/24          00001010.00000001.00000100. 00000000
Network:   10.1.5.0/24          00001010.00000001.00000101. 00000000
Network:   10.1.6.0/24          00001010.00000001.00000110. 00000000
Network:   10.1.7.0/24          00001010.00000001.00000111. 00000000

awk(gawk) 他の回避策が必要ですか?

ベストアンサー1

grepコマンドをエミュレートするには、次$1~のように変更または$0~削除します。

awk '/^Network:.+\/24[[:space:]]+/{print $2}'

または、より強力で移植可能にするには(POSIX awksだけでなく、すべてのawkでも動作します):

awk '($1 == "Network:") && ($2 ~ "/24$"){print $2}'

$1コードの問題は全体の式をテストしますが、$1最初のフィールドですNetwork:

おすすめ記事