我有多个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>
仅打印某些东西=“60”
的TAG块Output.txt的:
Before
<TAG>
#2
<InnerTAG something="60">Value2</InnerTAG>
</TAG>
After
目前,我的代码只打印TAG块,但我想将其“过滤”为只有TAG块的东西=“60”,甚至是内部值。基本上,通过块内的任何值。
我将如何做到这一点?
此外,如果有人有更详细的资料来阅读关于awk的信息,除了下面的帖子,你还会得到一个upvote和我的赞赏:) Is a /start/,/end/ range expression ever useful in awk?
干杯!
答案 0 :(得分:1)
要求救援
awk '/<TAG>/{f=1;c=0} f{d[c++]=$0} /<\/TAG>/{f=0} /60/&&f{for(i in d)print d[i]}'
您可能需要更详细地指定模式匹配,这里我只使用60作为概念证明。