awk: コマンド構文解析を使用して行を独自に変更します。複数行文字

awk: コマンド構文解析を使用して行を独自に変更します。複数行文字

質問に答えようとしています。これにはコマンドの使用が含まれますrecode。コマンドは特定の行を解析し、残りは変更しないでください。ファイルはxmlファイルです。例:

    <ITEM_ID>foo</ITEM_ID>
    <PRODUCTNAME>bar</PRODUCTNAME>
    <DESCRIPTION><p>foo</p><p> </p><p> </p></DESCRIPTION>
    <URL>bar</URL>
    <IMGURL>foo</IMGURL>
    <IMGURL_ALTERNATIVE></IMGURL_ALTERNATIVE>

必要な出力は次のようになります。

    <ITEM_ID>foo</ITEM_ID>
    <PRODUCTNAME>bar</PRODUCTNAME>
    <DESCRIPTION>&lt;p&gt;foo&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;</DESCRIPTION>
    <URL>bar</URL>
    <IMGURL>foo</IMGURL>
    <IMGURL_ALTERNATIVE></IMGURL_ALTERNATIVE>


注:このコマンドはrecode期待どおりに機能します。ラベル変換を避けることはDESCRIPTION後で解決することができ、問題の一部ではありません。

変更する必要がある行はで始まる行です<DESCRIPTION>

私はawk静止画を撮りませんが、予想されるコマンドは次のとおりです。

awk '/<DESCRIPTION>/ { $0 = print $0 "| recode ..html" }1' foo.txt

もちろんこれはうまくいきません。

この目標をどのように達成する必要がありますか?

ベストアンサー1

getline出力を変数として読み取るには、awkを使用する必要があります。また、録音が期待どおりに機能するようにロケールを正しく設定する必要があります。この試み:

$ LC_ALL=C gawk '/DESCRIPTION/{
        "echo \""$0"\" | recode ..html" | getline ff; print ff
       }' file 
    &lt;DESCRIPTION&gt;&lt;p&gt;foo&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/DESCRIPTION&gt;

おすすめ記事