ツリー情報をグラフ化する 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 "}"
}
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
$ dot -Tgif tree.dot -o tree.gif
課題:
1. グラフの体裁を制御できるようにする。
2. データファイルの不備をチェック。
3. Awk 以前の問題として、文字をきれいに表示するには?
[追記] Awk スクリプトの名前を T2G から T2D に変えた。