入力パラメータがブロックの中央にあるときにxmlブロックを取得するときにawkスコープモードを実装する方法

入力パラメータがブロックの中央にあるときにxmlブロックを取得するときにawkスコープモードを実装する方法

次のXML塊を取得しようとしています。

<machine name="sample1" min="1" max="10" idleTime="300" backend="ABC,XYZ">
                <handler className="com.abc.xyz.qwerty.foo.FooBar" />
                <details queue="ABC.SAMPLE" suggExpiry="30" minExpiry="4" maxExpiry="500"/>
                </machine>

詳細キューは入力パラメーターとして使用されます。

マシン名(@ブロックで始まる)が私のパラメータのときに成功しました。

awk '/<machine.*name="sample1"/,/<\/machine>/' Target.xml

入力パラメータが詳細キュー(@block中間)の場合、同じxmlブロックをどのように取得できますか?

ベストアンサー1

この問題の1つの観点は次のとおりですawk

awk '
  /<machine.*name=/ { f=1 ; m=0 ; res="" }
  f { res = res $0 ORS }
  f && /PATTERN/ { m=1 }
  /<\/machine>/ { f=0 ; if (m) print res $0 }
' your_XML_file

FSAを実施しています。フラグは、f必要な XML ブロックに存在するかmどうかを制御し、フラグは、エントリがそのブロックで見つかったかどうかを示し、resブロックを記憶するために使用され、条件が一致した場合、ブロックの最後に印刷されます。

探している実際のパターンを置き換える必要がありますPATTERN。たとえば、オープン<details queue="ABC.SAMPLE"XMLタグと閉じるXMLタグの間で検索されます。<machine>

おすすめ記事