# record format: page #:major entry:minor entry[:define] BEGIN { FS = ":" BD = "\\s+1\\fB" ED = "\\fP\\s-1" defn = "define" } NR == 1 { if ($3 != "") printf ".Ib \"%s\"\n", $2 major = $2 minor = $3 if ($4 == defn) pagelist = BD $1 ED else pagelist = $1 pageno = $1 oldpageno = $1 oldpagelist = "" } NR != 1 { if ($2 == major && $3 == minor) { # neither has changed if ($1 != pageno) { # new page number, append oldpageno = $1 oldpagelist = pagelist if ($4 == defn) pagelist = pagelist ", " BD $1 ED else pagelist = pagelist ", " $1 } else # old page, but check for def if ($4 == defn) { if (pageno == oldpageno && oldpagelist != "") oldpagelist = oldpagelist ", " pagelist = oldpagelist BD $1 ED } } else { # one has changed if (minor != "") # dump full record printf ".I< \"%s\" \"%s\" \"%s\"\n", \ major, minor, pagelist else printf ".I> \"%s\" \"%s\"\n", major, pagelist if ($4 == defn) # restart pagelist pagelist = BD $1 ED else pagelist = $1 oldpagelist = "" oldpageno = $1 if ($2 != major && $3 != "") # major has changed, minor not null printf(".Ib \"%s\"\n", $2) } major = $2 minor = $3 pageno = $1 } END { if (minor != "") # dump full record printf ".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist else printf ".I> \"%s\" \"%s\"\n", major, pagelist }