ファイルの繰り返し行「グループ化」でテキスト部分を解析する必要がある

ファイルの繰り返し行「グループ化」でテキスト部分を解析する必要がある

1つのマルチキャストグループインスタンスに関連する3行から5行の情報を含むファイルがあり、このファイルには複数のマルチキャストグループインスタンスが含まれています。

Group: 239.103.0.64
Source: 10.12.49.30/32
Upstream interface: ge-0/0/7.0

Group: 239.103.0.66
Source: 10.12.49.38/32
Upstream interface: ge-0/0/9.0

Group: 239.103.0.71
Source: 10.12.49.2/32
Upstream interface: ge-0/0/0.0
Downstream interface list: 
    xe-5/0/0.0

Group: 239.103.0.72
Source: 10.12.49.6/32
Upstream interface: ge-0/0/1.0
Downstream interface list: 
    xe-5/0/0.0
    xe-5/0/1.0

各インスタンスに対して、マルチキャストIPアドレス、送信元IPアドレス、アップストリームインターフェイス、およびダウンストリームインターフェイスのリストを含む1行の出力を作成しようとしています。ここで、フィールドは次のように区切ります。:上記の出力は次のようになります。

239.103.0.64:10.12.49.30/32:ge-0/0/7.0:
239.103.0.66:10.12.49.38/32:ge-0/0/9.0:
239.103.0.71:10.12.49.2/32:ge-0/0/0.0:xe-5/0/0.0
239.103.0.72:10.12.49.6/32:ge-0/0/1.0:xe-5/0/0.0 xe-5/0/1.0

ベストアンサー1

awk '
        /Group:/                     {g=$2; next}
        /Source:/                    {s=$2; next}
        /Upstream interface:/        {u=$3; next}
        /Downstream interface list:/ {dflag=1; next}
        /^$/ {print g ":" s ":" u ":" d; g = s = u = d = ""; dflag = 0; }
        { if (dflag) { if (d == "") d = $1; else d = d " " $1} }
        END  {print g ":" s ":" u ":" d; g = s = u = d = ""; dflag = 0; }
'
  • プログラムの最初の3行はawk非常に簡単です。そのラベルが表示されたら、マルチキャストIPアドレス、送信元IPアドレス、およびアップストリームインターフェイスの値をキャプチャします。
  • 4行目は、「ダウンストリームインターフェイスリスト」ラベルを確認した後、後続の(空白ではない)行にダウンストリームインターフェイスが含まれていることがわかるようにフラグを設定します。
  • 次の6行目を見る方が合理的です。 「ダウンストリームインターフェースのリスト」ラベルが表示されている場合は、リストされた値を収集してスペースで区切ります。
  • 5行と7行はほぼ同じです。空の行またはファイルの終わりに達すると、これまでに収集されたデータを印刷します。

おすすめ記事