使用此:
awk '$1 == "pool" { f=1; print $1,$2; next }
f == 1 { if ($1 == "pool") { print }
else if ($1 == "members") { print }
else if ($0 ~ /^}/) { f=0 }
}' bigip.conf
这样可以正常工作,直到配置中包含以下行的IP。 如果IP位于以下行,我怎样才能打印IP。 配置有两个,有些在同一行,有些在接下来的1,2或3行。
数据:
pool pl_stage_xxx_microsites_9483 {
monitor all tcp_half_open
members {
11.11.11.11:9483 {}
11.22.22.22:9483 {
session user disabled
}
}
}
答案 0 :(得分:1)
尝试以下awk
代码:
awk '
$1 == "pool" {
f=1
print $1,$2
next
}
f == 1 {
if ($1 == "pool") {
print
}
else if ($1 == "members") {
print
getline
while ($0 ~ "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}"){
print
getline
}
}
else if ($0 ~ /^}/) {
f=0
}
}'
这将在IP线存在时打印出来。
答案 1 :(得分:0)
很难说没有看到更多的数据和预期的输出,但我认为您需要的是这样的:
awk '
/^}/ { inPool=0 }
$1 == "pool" { inPool=1; inMembers=0 }
inPool {
if ($1 == "pool") {
print $1, $2
print
}
else if ($1 == "members") {
inMembers = 1
}
if (inMembers) {
print
}
}
' file
上述应该至少是一个很好的起点。 wrt使用getline发布了另一个答案 - getline有一些合适的用途,但这不是其中之一,在你完全理解之前不要使用getline,并且可以接受所有这些警告,请参阅http://awk.info/?tip/getline。