テキストファイルで特定のパターンを見つけて、出力から除外しますか?

テキストファイルで特定のパターンを見つけて、出力から除外しますか?

約25000行のファイルがあります。私の例の入力と希望の出力を見てください。

入力する:

zone name tommy
* pwwn xxxxxxxx
  pwwn xyzabcda
* pwwn xcvuytnm
zone name sammy
* pwwn akslapsl
* pwwn dfgsjasl
* pwwn xcvuytnm
zone name angelfalls
* pwwn xxxxxxxx
  pwwn xyzabcda
zone name Newyork
* pwwn xxxxxxxx
  pwwn xyzabcda

希望の出力:

zone name tommy
* pwwn xxxxxxxx
  pwwn xyzabcda
* pwwn xcvuytnm
zone name angelfalls
* pwwn xxxxxxxx
  pwwn xyzabcda
zone name Newyork
* pwwn xxxxxxxx
  pwwn xyzabcda

pwwnの前の各行に*を含むすべての領域を除外するように出力したいと思います。私の例では、ゾーン名sammyには3つのpwwn行すべてに*が含まれているので、ゾーン名sammyの下のすべての*行を除外しました。

Solaris 5.10、Korn Shellを使用してください。

ベストアンサー1

Awk解決策:

awk '/^zone /{ 
         if (f) print r;
         r = $0; f = 0; next 
     }
     { r = r ORS $0; if (/^[^*]* pwwn/) f = 1; }
     END{ if (f) print r }' file

出力:

zone name tommy
* pwwn xxxxxxxx
  pwwn xyzabcda
* pwwn xcvuytnm
zone name angelfalls
* pwwn xxxxxxxx
  pwwn xyzabcda
zone name Newyork
* pwwn xxxxxxxx
  pwwn xyzabcda

おすすめ記事