#! /usr/bin/gawk -f
# Last edited on 1999-07-28 01:44:14 by stolfi
BEGIN{
abort = -1;
usage = "dot-product DIRFILE PTFILE";
#
# where each line of both DIRFILE and PTFILE has the format
# COORD LABEL, where COORD is a real number and LABEL is any
# word. (The LABELs must be sorted and must match in both files.)
#
# After reading both files, prints to stdout
# a single number, the sum of COORDs of DIRFILE times
# the COORDs of PTFILE
if (ARGC != 3) { error(("ARGC = " ARGC " - usage: " usage)); }
dir = ARGV[1];
vec = ARGV[2];
if (dir == "") { error(("usage: " usage)); }
if (vec == "") { error(("usage: " usage)); }
N = 0;
prod = 0;
while (getline < dir)
{ N++;
if (NF != 2) { error((dir ", line " N ": bad format")); }
w = $2;
ai = $1;
getline < vec;
if (ERRNO != "0") { error((vec ": " ERRNO)); }
if (NF != 2) { error((vec ", line " N ": bad format")); }
if (w != $2) { error((vec ", line " N ": bad format")); }
bi = $1;
prod += ai*bi;
}
if (ERRNO != "0") { error((dir ": " ERRNO)); }
close(dir);
close(vec);
printf "%-8.5f", prod;
}
function error(msg)
{
printf "%s\n", msg > "/dev/stderr";
abort=1; exit(1);
}