代码之家  ›  专栏  ›  技术社区  ›  Dunams

从日志文件中提取特定的XML

  •  0
  • Dunams  · 技术社区  · 7 年前

    我有很大的日志文件(每个大约50mb),其中包含java调试信息和各种XML响应

    下面是我试图从日志中提取的一个示例

    <envelope>
        <response>
            <ATTR name="uniqueid" value="XYZ_00000-00-00_12345_1"/>
            <ATTR name="status" value="Activated"/>
            <ATTR name="datecreated" value="2018/10/04 09:39:05"/>
        </response>
    </envelope>
    

    我只需要uniqueid属性 包含

    通过使用“sed”,我可以提取所有信封,目前我正在使用regex检查信封中是否存在上述条件(通过在循环中运行所有这些条件)。

    sed -n '/<envelope>/,/<\/envelope>/p' logfile
    

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   karakfa    7 年前

    假设您的xml格式如图所示,这应该可以工作。。。

    $ awk '/<envelope>/ {line=$0; p=0; next} 
                 line   {line=line ORS $0} 
        /uniqueid/ && $3~/12345/ {p=1}
       /<\/envelope>/ && p {print line}' file
    

    对于开始标记,开始累积行,如果找到所需行,则设置标志,对于结束标记,如果设置标志,则打印记录。

    具有 gawk 你可以这样做

    $ awk -F'\n' -v RS='</envelope>\n'    \
        '$3~/uniqueid.*12345/ && $4~/status.*Activated/{print $0, RT}' file
    

    不过,还会有一条新的线路。