XML のパース
xml parser using perl/awk/python - Stack Overflow からですが、日本語訳をしておきます。
以下のようなデータ形式の XML があります。 <net NetName="abc" attr1="123" attr2="234" attr3="345".../> <net NetName="cde" attr1="456" attr2="567" attr3="678".../> .... awk の一行野郎で "abc" のところの attr3 を取得して "345" を返せますか?
ええ、awk で返せますとも! もちろん、一行野郎で!
仮に以下のような XML だとします。
$ cat test.xml <?xml version="1.0" encoding="UTF-8"?> <netlist> <net NetName="abc" attr1="123" attr2="234" attr3="345">123</net> <net NetName="cde" attr1="456" attr2="567" attr3="678">456</net> </netlist>
これを xgawk の一行野郎で以下のように処理します。
$ xgawk -lxml 'XMLATTR["NetName"] == "abc"{print XMLATTR["attr3"]}' test.xml
345
というわけで簡単にできました。
もっともフォーマットが固定されているなどの前提があるのであれば、以下のようなスクリプトで普通の awk でも処理できるかもしれません。
$ nawk -F '[ ="]+' '/abc/{for(i=1;i<=NF;i++){if($i=="attr3"){print $(i+1)}}}' test.xml
345
XML を普通の awk で処理するのはさすがに怖いですね。

