在每次awk迭代之间插入值

时间:2015-08-31 16:03:21

标签: awk sh ksh

我正在解析一个日志文件,它载有许多类型的XML。我使用awk来提取XML的特定部分。我使用以下内容:

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

但是,因为这些是内部标记而不是整个XML的开头或结尾(因为有多种类型的XML),我需要添加初始标记以及底部的结束标记(以完成由于top和bottom标签对于所有类型的XML都是通用的,因此我想要一种特定的类型。

问题是:

有没有办法可以在每次awk迭代之前和之后添加文本?​​

示例:

输入:

<TAG>
    <InnerTAG>
    </InnerTAG>
</TAG>
<TAGTWO>
    <InnerTAG>
    </InnerTAG>
</TAGTWO>
<TAG>
    <InnerTAG>
    </InnerTAG>
</TAG>

输出:

TOP
<TAG>
    <InnerTAG>
    </InnerTAG>
</TAG>
BOTTOM
TOP
<TAG>
    <InnerTAG>
    </InnerTAG>
</TAG>
BOTTOM

TOP&amp; BOTTOM是两种不同的印花或者我添加的东西?

PS:我无法预先知道有多少次迭代...这也是每个文件的动态。

谢谢,

1 个答案:

答案 0 :(得分:0)

尝试类似

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

用任何你想要的东西替换“之前”和“之后”。