FSLのJHU-labels.xml から、awk を使って領域名だけを抽出する方法

FSLのJHU-labels.xml から、awk を使って領域名だけを抽出する方法

先日、FSLのJHU-labels.xml から、sed を使って領域名だけを抽出する方法を書きました。

その後、awk を使うともっとエレガントにできてしまうことに気づきました。
ポイントは、awk は、 区切り文字を複数指定できる ということです。

JHU-labels.xml の “<label ” があるところだけ取り出してみます。

cat JHU-labels.xml | grep '<label ' | head -n 5

<label index="0" x="0" y="0" z="0">Unclassified</label>
<label index="1" x="69" y="83" z="36">Middle cerebellar peduncle</label>
<label index="2" x="89" y="97" z="40">Pontine crossing tract (a part of MCP)</label>
<label index="3" x="93" y="152" z="77">Genu of corpus callosum</label>
<label index="4" x="95" y="100" z="97">Body of corpus callosum</label>

これで見ると、 “<” と “>” で区切ることができたら、領域名は3番目のフィールドということになります。

  • 1番目は行頭から 最初の “<” まで。(実質文字はなし)
  • 2番目は “
  • 3番目は 領域名
  • 4番目は /label

awk の区切り文字の指定は、 -F の後に指定するのですが、正規表現が使えるとのことです。今は、 “<” か “>” のどちらかということなので、 ‘[<>]’ として表現できます。

それではやってみましょう。

cat JHU-labels.xml | grep <label  |\
  awk -F'[<>]' '{ print $3 }'

Unclassified
Middle cerebellar peduncle
Pontine crossing tract (a part of MCP)
Genu of corpus callosum
Body of corpus callosum
Splenium of corpus callosum
Fornix (column and body of fornix)
Corticospinal tract R
Corticospinal tract L
Medial lemniscus R
Medial lemniscus L
...

なんと取り出せました!awk の区切り文字を複数指定できるということを昨日まで知らなかったのでびっくりしています。これは XMLだけでなくXMLにも応用できますから、相当応用が広がりそうです。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください