#! /bin/bash
# Last edited on 2017-05-13 03:36:25 by stolfilocal

# Usage: "$0 {basefile} {testfile}.."

# Checks whether the dates and times of the file(s) {testfile} are
# contained in {basefile}.

basefile="$1"; shift # Name of base file.
testfiles=( "$@" )   # Name(s) of test file(s).

tmp="/tmp/$$"
bdates="${tmp}-b.txt" # Base file dates.
tdates="${tmp}-t.txt" # Dates from one test file.
mdates="${tmp}-m.txt" # Dates missing in basefile.
ddates="${tmp}-m.txt" # Duplicated dates.

function exdates() {
  ifile="$1"; shift
  ofile="$1"; shift
  # Extract dates, ignoring lines with missing dates:
  cat ${ifile} \
    | egrep -e '^20[0-9][0-9]-[-0-9]*[ ]' \
    | egrep -v -e ' [.] *$' \
    | gawk \
        ' //{ 
            gsub(/[|]/, " ", $0);
            if (NF < 2) { printf "**BUG NF\n" > "/dev/stderr" ; exit(1); }
            da=$1; ti=$2;
            printf "%s %s\n", da, ti;
          } 
        ' \
    | sort \
    > ${ofile}
  printf "  ${ifile}: %s dates\n" "`cat ${ofile} | wc -l`"
  cat ${ofile} | uniq -d > ${ddates}
  if [[ -s ${ddates} ]]; then
    echo "  ** duplicate dates " 1>&2;
    cat ${ddates} | sed -e 's:^:    :g'
    exit 1
  fi
}

# Extract dates from base file:
exdates ${basefile} ${bdates}

for tf in "${testfiles[@]}"; do
  # Extract date-times from test file ${tf}:
  exdates ${tf} ${tdates}
  
  # Check for containment:
  bool 2-1 ${bdates} ${tdates} > ${mdates}
  if [[ -s ${mdates} ]]; then
    echo "  !! dates only in ${tf} "
    cat ${mdates} | sed -e 's:^:    :g'
  fi
done

rm -f ${tdates} ${bdates} ${mdates} ${ddates}
    
