#!/bin/sh # version 2007.09.24 # D. J. Bernstein # Public domain. original-awk -F: ' function search(i, j) { if (v[i] in vx) return ++firstx[vy[v[i]]] vx[v[i]] = firstx[vy[v[i]]] for (j = 1;j <= targetnum[v[i]];++j) search(target[v[i]"/"j]) } BEGIN { v[0] = 0 vlookup[0] = 0 vlabel[0] = "zero" vy[0] = 0 } { if ($1 == "vertex" && $3 == "label") { vnum = vnum + 1 v[vnum] = $2 vlookup[$2] = vnum vlabel[$2] = $4 } else if ($1 == "vertex" && $3 == "y") { vy[$2] = $4 } else if ($1 == "edge") { enum = enum + 1 estart[enum] = $2 eend[enum] = $3 eflipped[enum] = $4 } } END { for (i = 1;i <= enum;++i) { targetnum[estart[i]] += 1 target[estart[i]"/"targetnum[estart[i]]] = eend[i] targetflip[estart[i]"/"targetnum[estart[i]]] = eflipped[i] } for (i = 1;i <= vnum;++i) search(i) for (i = 1;i <= vnum;++i) { print "vertex:"v[i]":label:"vlabel[v[i]]":" if (v[i] in vx) print "vertex:"v[i]":x:"vx[v[i]]":" if (v[i] in vy) print "vertex:"v[i]":y:"vy[v[i]]":" } for (i = 0;i <= vnum;++i) { for (j = 1;j <= targetnum[v[i]];++j) { print "edge:"v[i]":"target[v[i]"/"j]":"targetflip[v[i]"/"j]":" } } } '