仅打印块中出现特定值的 awk 块

Print only awk blocks where a specific value appears within the block

我有多个使用以下方法打印的 awk 块:

awk '/<TAG>/ {print "Before"} 
     /<TAG>/,/<\/TAG>/ {print} 
     /<\/TAG>/ {print "After"}' ${LOG} > OUTPUT.txt;

在这个阶段,输出的是相同的XML,但数据不同。我希望 Output.txt 只包含其中具有特定值的 awk 块。如果此值出现一次或多次,则打印块。

示例:

输入:

<TAG>
    #1
    <InnerTAG something="50">Value</InnerTAG>
</TAG>
<TAG_Two>
    #2
    <InnerTAG something="60">Value2</InnerTAG>
</TAG_Two>
<TAG>
    #2
    <InnerTAG something="60">Value2</InnerTAG>
</TAG>

仅打印 something="60" 的 TAG 块

Output.txt:

Before
<TAG>
    #2
    <InnerTAG something="60">Value2</InnerTAG>
</TAG>
After

目前,我的代码只打印 TAG 块,但我想 "filter" 只打印带有 something="60" 或什至内部值的 TAG 块。本质上,通过块内的任何值。

我该怎么做?

此外,如果有人除了以下 post 之外还有更详细的 awk 资源可以阅读,您也会得到一个赞和我的赞赏 :) Is a /start/,/end/ range expression ever useful in awk?

干杯!

awk 来拯救

awk '/<TAG>/{f=1;c=0} f{d[c++]=[=10=]} /<\/TAG>/{f=0} /60/&&f{for(i in d)print d[i]}'

您可能需要更详细地指定您的模式匹配,这里我只是使用 60 作为概念证明。