Xml awk,提取不同分隔符之间的字符串

Xml awk,提取不同分隔符之间的字符串,xml,awk,extract,Xml,Awk,Extract,我有如下xml文件: <Name ns1:translate="yes">Overview</Name> <TextValue>Start</TextValue> <Title ns1:translate="yes">This is a "book"</Title> <Title>BOOK</Title> <Description ns1:translate="yes"/> &l

我有如下xml文件:

<Name ns1:translate="yes">Overview</Name>     
<TextValue>Start</TextValue>
<Title ns1:translate="yes">This is a "book"</Title>
<Title>BOOK</Title>
<Description ns1:translate="yes"/>
<TextValue ns1:translate="yes">End</TextValue> 
Overview = Overview
This is a "book" = This is a "book"
   = 
End = End
我需要使用shell脚本执行上述提取。我尝试使用:

awk awk -F '["<>]' '{if (/.*translate="yes".*/) {print ((NF>6?OFS $(NF-2):x))}
awk-awk-F'[“]'{if(/.*translate=“yes”。*/){print((NF>6?OFS$(NF-2):x))}

但由于输出中的“书”没有打印出来,因此它没有给我期望的结果。请让我知道上述awk中的错误。

正如tripleee建议的那样,您应该使用xml解析器。对于使用
awk
的脏解决方案,您可以执行以下操作:

awk -F '[<>]' '{ for (i=1; i<=NF; i++) if ($i ~ /translate="yes"/) print $(i+1), "=", $(i+1) }' file.txt
此解决方案将在找到
translate=“yes”
.YMMV.

>awk'BEGIN{FS=”“}/translate=“yes”/{split($2,a,“>”);打印a[2]=“a[2]}”temp后只打印下一个元素
>awk 'BEGIN{FS="<|>"}/translate="yes"/{split($2,a,">");print a[2]"="a[2]}' temp
Overview=Overview
This is a "book"=This is a "book"
=
End=End
概述=概述 这是一本“书” = 结束
改用类似
xsltproc
的XML感知工具。
>awk 'BEGIN{FS="<|>"}/translate="yes"/{split($2,a,">");print a[2]"="a[2]}' temp
Overview=Overview
This is a "book"=This is a "book"
=
End=End