0

これを使用して:

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を印刷するにはどうすればよいですか。構成には両方があり、同じ行にあるものもあれば、次の 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
          }
       }
}
4

2 に答える 2

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 行が存在する間、それらが出力されます。

于 2012-10-17T16:29:05.863 に答える
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

上記は、少なくとも良い出発点になるはずです。getline を使用して投稿された他の回答について - getline にはいくつかの適切な用途がありますが、これはそれらの 1 つではありません。完全に理解し、すべての警告を受け入れることができるまで、getline を使用しないでください。http://awk.info/?を参照してください。ヒント/getline .

于 2012-10-17T16:55:24.273 に答える