次の内容を含むファイルがあります。
<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