to top page
2012-12-27
ツリー情報をグラフ化する Awk スクリプト T2D-0.1


表題は大げさで、実体はツリー情報を記したテキストを読んで DOT 言語のスクリプトを生成する Awk スクリプト。

ツリー構造を記したデータファイル tree.data。「-」の数で世代を表す。
- 家康
-- 信康
-- 秀忠
--- 千姫
--- 家光
---- 家綱
----- 綱吉
---- 綱吉
-- 義直
--- 尾張家
-- 頼宣
--- 紀州家
-- 頼房
--- 水戸家

データを処理する Awk スクリプト t2d。
BEGIN {
    print "digraph Tree {"
}
/^-/ {
    len = length($1)
    if (len > gen) {
        if (gen > 0) printf "%s -> %s;\n", tree[gen], $2
        tree[++gen] = $2
    } else {
        if (len > 1) printf "%s -> %s;\n", tree[len-1], $2
        gen = len; tree[gen] = $2
    }
}
END {
    print "}"
}

次の2つのコマンドで上の家系図ができる。
$ awk -f t2d tree.data > tree.dot
$ dot -Tgif tree.dot -o tree.gif

課題:
1. グラフの体裁を制御できるようにする。
2. データファイルの不備をチェック。
3. Awk 以前の問題として、文字をきれいに表示するには?

[追記] Awk スクリプトの名前を T2G から T2D に変えた。