XMLファイルからテキストブロックを抽出する

XMLファイルからテキストブロックを抽出する

次の内容を含むファイルがあります。

<People>
    <Person>
       <Name>Joe Blogs</Name>
       <Address>55 Oxford St</Address>
       ...lots of other properties
    </Person>
    <Person>
       <Name>Jane Pearson</Name>
       <Address>100 Samson St</Address>
       ...lots of other properties
    </Person>
</People>

私が使用できる唯一のツールはawk、sed、grep、pcre_grepです。

各「Person」タグの内容を抽出して「Name」行を削除した後、ブロックのmd5を計算したいと思います。

私が今まで試したこと:

awk '/<Person>/,/<\/Person>/{print $0}' input.xml | md5sum

ただし、これはmd5のみを返します。各ブロックには1つはありません。

ベストアンサー1

次のawkスクリプトを試してください。

awk '
/<Person>/,/<\/Person>/{
    if (! /<Name>/)
        a=a s $0
    s="\n"
    }
/<\/Person>/{
    system("echo \""a"\" |md5sum - ")
    a=s=""
    }' input.xml

説明する:

  • タグ間のすべての行を変数Personとして収集a
  • 終了マークが満たされた場合、空変数/Personの代わりにシステムコマンドを呼び出すa

おすすめ記事