#!/bin/sh # version 2007.09.24 # D. J. Bernstein # Public domain. original-awk -F: ' BEGIN { vlookup[0] = 0 } { if ($1 == "vertex" && $3 == "label") { vnum = vnum + 1 vlookup[$2] = vnum vlabel[vnum] = $4 } else if ($1 == "vertex" && $3 == "x") { vx[vlookup[$2]] = $4 } else if ($1 == "vertex" && $3 == "y") { vy[vlookup[$2]] = $4 } else if ($1 == "edge") { enum = enum + 1 estart[enum] = vlookup[$2] eend[enum] = vlookup[$3] eflipped[enum] = $4 } } END { for (i = 1;i <= enum;++i) { j = estart[i] voutgoing[j] += 1 vtarget[j] = eend[i] vflip[j] = eflipped[i] vincoming[eend[i]] += 1 } for (i = 1;i <= vnum;++i) { if (voutgoing[i] == 1 && vincoming[i] == 1) vkill[i] = 1 else { print "vertex:"i":label:"vlabel[i]":" if (i in vx) print "vertex:"i":x:"vx[i]":" if (i in vy) print "vertex:"i":y:"vy[i]":" } } for (i = 1;i <= enum;++i) { if (!(estart[i] in vkill)) { to = eend[i] flip = eflipped[i] while (to in vkill) { flip = (vflip[to] + flip) % 2 to = vtarget[to] } print "edge:"estart[i]":"to":"flip":" } } } '