約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