我想从主要包含Java日志数据(debug/errors/info)的日志文件中提取以下XML:
<envelope>
<header>
...
</header>
<body>
<Provision>
<ORDER id="XYZ_123_456" action="test">
....
</ORDER>
</Provision>
</body>
</envelope>
我只需要一个有“Provision”标签,并且包含订单id XYZ_123_456的
我已经尝试使用了以下方法,但它也返回不带Provision标记的XMLs。(我在awk中几乎一无所知,这是我为这个特殊需要修改的代码)
awk '/<envelope>/ {line=$0; p=0 && x=0; next}
line {line=line ORS $0}
/ORDER/ && $2~/XYZ_123_456/ {p=1}
$0~/<Provision>/ {x=1}
/<\/envelope>/ && p && x {print line;}' dump.file
谢谢!
最佳答案
$ cat tst.awk
/<envelope>/ { inEnv = 1 }
inEnv { env = env $0 ORS }
/<\/envelope>/ {
if ( env ~ /<Provision>.*<ORDER[[:space:]]+id="XYZ_123_456"/ ) {
printf "%s", env
}
env = inEnv = ""
}
$ awk -f tst.awk file
<envelope>
<header>
...
</header>
<body>
<Provision>
<ORDER id="XYZ_123_456" action="test">
....
</ORDER>
</Provision>
</body>
</envelope>