1

私は以下のような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

シェルスクリプトを使用して上記の抽出を行う必要があります。私は使用しようとしました:

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

しかし、出力の「本」が印刷されないため、望ましい結果が得られません。上記のawkで何が問題になるか教えてください。

4

2 に答える 2

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
于 2012-08-23T06:10:06.703 に答える
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。

于 2012-08-23T05:47:05.577 に答える