#! /usr/bin/gawk -f # Last edited on 2001-11-16 15:43:30 by stolfi (FNR == 1) { ax = $1; am = $2; aini1 = $3; ans1 = $4; if ($5 != "+") { error("missing \"+\""); } bx = $6; bm = $7; bini1 = $8; bns1 = $9; if ($10 != "-") { error("missing \"-\""); } next; } (FNR == 2) { if (ax != $1) { error("bad sega.index"); } if (am != $2) { error("bad sega.tot"); } aini2 = $3; ans2 = $4; if ($5 != "+") { error("missing \"+\""); } if (bx != $6) { error("bad segb.index"); } if (bm != $7) { error("bad segb.tot"); } bini2 = $8; bns2 = $9; if ($10 != "-") { error("missing \"-\""); } # Decide the order in which they should be joined ad12 = (aini2 - aini1 + am) % am; ad21 = am - ad12; bd12 = (bini2 - bini1 + bm) % bm; bd21 = bm - bd12; if ((ad12 < ad21) && (bd12 > bd21)) { aini = aini1; ans = ad12 + ans2; bini = bini2; bns = bd21 + bns1; } else if ((ad12 < ad21) && (bd12 > bd21)) { aini = aini2; ans = ad21 + ans1; bini = bini1; bns = bd12 + bns2; } else { error("inconsistent orders"); } printf "%03d %04d %4d %3d + %03d %04d %4d %3d - 0 %.1f 0\n", ax, am, aini, ans, bx, bm, bini, bns, (ans+bns)/2; next; } //{ error("too many cands"); } function error(msg) { printf "ERROR - %s\n", msg > "/dev/stderr"; exit 1; }