#!/bin/bash # status of the Swift Observatory for NDAYS starting YYYY-MM-DD # # dsSwift -d NDAYS {-a} {-h} [YYYY-MM-DD] # default for YYYY-MM-DD is today # default for NDAYS is 1 # -a .. "as flow timeline" [default is "pre-planned timeline"] # # LAST REVISION: 25-January-2020 #----------------------------------------------------------------------- HELP=; NDAYS=1; PLANCHOICE=0; NMAX=30; #----------------------------------------------------------------------- URL="https://www.swift.psu.edu/operations/obsSchedule.php?" #----------------------------------------------------------------------- TF="OUT_dsSwift" TFh=$TF.html TFt=$TF.txt TFp=$TF.txtp trap "[ -e $TFh ] && rm $TFh $TFt $TFp" EXIT #----------------------------------------------------------------------- while getopts d:ah OPTVAL do case $OPTVAL in h) HELP=1;; d) NDAYS=$OPTARG;; a) PLANCHOICE=1;; *) echo "dsSwift -h for help"; exit -1;; esac done shift $((OPTIND-1)) if [ $HELP ]; then echo " dsSwift [-d NDAYS] {-a} {-h} YYYY-MM-DD" echo " Swift Observatory schedule for NDAYS starting YYYY-MM-DD" echo " MM is 01..12, DD is 01..31; default: TODAY" echo " -d default is NDAYS=1" echo ' -a .. "as flow timeline", default is "planned timeline"' exit fi [ $# -gt 2 ] && { echo "dsSwift: too many parameters"; exit -1; } #----------------------------------------------------------------------- if [ $# -eq 0 ]; then M=$(date "+%m"); Y=$(date "+%Y"); D=$(date "+%d") DATE=$(echo $Y-$M-$D) else DATE=$1 fi echo $DATE | grep -q "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" | [ $? -ne 0 ] && { echo "dsSwift: incorrect data format"; exit -1; } [ $NDAYS -gt $NMAX ] && { echo "dsSwift: that many days! really?"; exit -1; } #----------------------------------------------------------------------- DAYS=$(seq $NDAYS) for d in $DAYS; do d=$((d-1)) date=$(gdate -d "$DATE +$d days" '+%Y-%m-%d') #note used GNU date curl -s -o $TFh $URL"d=$date&a=$PLANCHOICE" #get banner line banner=$(sed -n 's;\(.*\)\([^<]*\)\(<.title>\);\2;p' OUT_dsSwift.html) echo $banner | grep -q "Choose Schedule" if [ $? -eq 0 ]; then echo "schedule for $date not posted; exiting"; exit -1 else dline; echo -e "\t\t$banner"; dline fi textutil -convert txt $TFh sed -ip '1,/Notes:/d' $TFt #strip out lines to get to header and data table #extract header head -24 $TFt | gsed -n 'h;n;x;G;s/\n//gp' | gsed 's/\s//;s/\s *$/,/' | xargs | gsed 's/\s*//g;s/.$//;s/,/\t/g' > $TFp #extract data gsed '1,24d' $TFt | gsed 's/^\s*//;s/\s*$//;/^[ ]*$/d;$d' | gsed -n '1~12{h;n;H;n;H;n;H;n;H;n;H;n;H;n;H;n;H;n;H;n;H;n;H;x;s/\n/\t/gp;}' >> $TFp #select key items to dsiplay; use column for pretty output awk -F"\t" '{$2=$4=$8=$9=$10=$11="";sub(/ /,"_",$1);gsub(/ /,"");print $1,$3,$5,$6,$7,$12}' OFS="\t" $TFp | column -t echo done