#! /usr/bin/gawk -f # Last edited on 2002-05-04 18:24:47 by stolfi BEGIN { cmd = "create-full-seg-file"; usage = ( cmd " \\\n" \ " -v chainDir=CURVEDIR \\\n" \ " -v iniCurve=INICURVE -v finCurve=FINCURVE \\\n" \ " -v band=BAND \\\n" \ " > OUTFILE.seg" \ ); abort = -1; # Creates a full-curve segment file given a bunch of curves if (chainDir == "") { arg_error(("must define \"chainDir\"")); } if (iniCurve == "") { arg_error(("must define \"iniCurve\"")); } if (finCurve == "") { arg_error(("must define \"finCurve\"")); } if (band == "") { arg_error(("must define \"band\"")); } minSamples = 5; # Ignore curves shorter than this split("", size); # size[curve] = num samples of curve "curve" nsegs = 0; for (curve = iniCurve; curve <= finCurve; curve++) { fcv_file = sprintf("%s/%04d/f%s.fcv", chainDir, curve, band); size[curve] = get_num_samples(fcv_file); if (size[curve] >= minSamples) { nsegs++; } } printf "begin PZSegment.List (format of 99-07-25)\n" printf "| %s \n", cmd; printf "| -v chainDir=%s \n", curvedir; printf "| -v iniCurve=%s -v finCurve=%s\n", iniCurve, finCurve; printf "| -v band=%s\n", band; printf "segments = %d\n", nsegs; for (curve = iniCurve; curve <= finCurve; curve++) { nsamples = size[curve]; if (nsamples >= minSamples) { printf "%04d %5d 0 %5d +\n", curve, nsamples, nsamples; } } printf "end PZSegment.List\n"; } function get_num_samples(fname, lin,nsamples,found,nlin) { nlin = 0; found = 0; ERRNO = "0"; while ((! found) && ((getline lin < fname) > 0)) { nlin++; if (match(lin, /^samples[ ]*[=][ ]*/)) { nsamples = substr(lin, RSTART+RLENGTH) + 0; found = 1; } } if (ERRNO != "0") { file_error(fname, nlin, ERRNO); return -1; } close (fname); if (nlin == 0) { arg_error(("file \"" fname "\" empty or missing")); } if (found == 0) { arg_error(("file \"" fname "\": no \"samples =\" line")); } return nsamples; } function arg_error(msg) { printf "%s\n", msg > "/dev/stderr"; printf "usage: %s\n", usage > "/dev/stderr"; abort = 1; exit 1; } function file_error(f,n,msg) { printf "file %s, line %d: %s\n", f, n, msg > "/dev/stderr"; }