#! /usr/bin/gawk -f # Last edited on 2019-10-28 14:06:58 by jstolfi # Reads from stdin a bunch of price file names of the form # "{TDLO}--{TDHI}-{EX}-{CR}-{TU}.txt" # They must be sorted in ascending order of {TDLO}, # and the intervals {TDLO .. TDHI} must overlap without gaps. # All names must have the same {EX}, {CR}, and {TU}. # Writes to stdout a line "{GTDLO} {GTDHI} {EX} {CR} {TU}" # where {GTDLO .. GTDHI} is the union of all intervals {TDLO .. TDHI}. BEGIN{ abort = -1 # Global data of the union: gdlo = ""; gdhi = ""; gex = ""; gcr = ""; gtu = "" } (abort >= 0) { exit(abort) } /^20(09|[12][0-9])-/ { # Extract datetime span from file name: gsub(/[.]txt *$/, "", $0) gsub(/^[ ]*/, "", $0) gsub(/--/, " ", $0) $0 = gensub(/-([A-Z])/, " \\1", "g", $0) $0 = gensub(/([A-Z])-/, "\\1 ", "g", $0) if (NF != 5) { printf "** bug NF %d\n \"%s\"\n", NF, $0 > "/dev/stderr"; abort = 1; exit(1) } dlo = $1; dhi = $2; ex = $3; cr = $4; tu = $5 if (dlo > dhi) { printf "** bug dlo,dhi\n" > "/dev/stderr"; abort = 1; exit(1) } # Unite into global span, check for gaps: if (gdlo == "") { gdlo = dlo; gdhi = dhi; gex = ex; gcr = cr; gtu = tu; } else { if (dlo < gdlo) { printf "** bug sort\n" > "/dev/stderr"; abort = 1; exit(1) } if (dlo > gdhi) { printf "** GAP? %s .. %s\n", gdhi, dlo > "/dev/stderr"; abort = 1; } if (ex != gex) { printf "** bad ex %s %s\n", ex, gex > "/dev/stderr"; abort = 1; } if (cr != gcr) { printf "** bad cr %s %s\n", cr, gcr > "/dev/stderr"; abort = 1; } if (tu != gtu) { printf "** bad tu %s %s\n", tu, gtu > "/dev/stderr"; abort = 1; } if (dhi > gdhi) { gdhi = dhi } } next } // { printf "** bug dlo,dhi\n" > "/dev/stderr"; abort = 1; exit(1) } END { if (abort >= 0) { exit(abort); } print gdlo, gdhi, gex, gcr, gtu }