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

时间:2012-08-23 05:27:07

标签: 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"/>
<TextValue ns1:translate="yes">End</TextValue> 

如果标签包含translate =“yes”,我想提取字符串。输出应如下所示:

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会出现什么问题。

2 个答案:

答案 0 :(得分:1)

像tripleee建议的那样,你应该使用xml-parser。对于使用awk的脏解决方案,您可以执行以下操作:

awk -F '[<>]' '{ for (i=1; i<=NF; i++) if ($i ~ /translate="yes"/) print $(i+1), "=", $(i+1) }' file.txt

结果:

Overview = Overview
This is a "book" = This is a "book"
 = 
End = End

此解决方案将在找到translate="yes"后打印下一个元素。 YMMV。

答案 1 :(得分:1)

>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