49 lines
1.2 KiB
Bash
49 lines
1.2 KiB
Bash
#!/bin/bash
|
|
# cal2day - "parse" appropriate calendar output to match date number
|
|
# with day name.
|
|
#
|
|
# usage: cal2day month day [year]
|
|
#
|
|
# ORIGINAL *TAG:33239 3:Dec 9 1997:0755:sh.d/cal2day:
|
|
#
|
|
# Obtained from usenet
|
|
#
|
|
# Converted to bash v2 syntax by Chet Ramey <chet@po.cwru.edu>
|
|
|
|
#1 PARSE OPTIONS
|
|
while getopts :dls _inst
|
|
do case $_inst in
|
|
(d) format='%1d%.0s\n' ;; # 0, 1, ..., 7
|
|
(l) format='%0.s%-s\n' ;; # Sunday, Monday, ..., Saturday
|
|
(s) format='%0.s%-.3s\n' ;; # Sun, Mon, ..., Sat
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
#2 PARAMETER VALUES
|
|
((!$#)) && set -- $(date '+%m %d')
|
|
: ${format:='%0.s%-.3s\n'}
|
|
: ${1:?missing month parameter [1-12]}
|
|
: ${2:?missing day parameter [1-31]}
|
|
|
|
#3 CALCULATE DAY-OF-WEEK FROM DATE
|
|
cal $1 ${3:-$(date +%Y)} | gawk -FX '
|
|
BEGIN { day="Sunday Monday Tuesday WednesdayThursday Friday Saturday"
|
|
sub(/^0/, "", daynum)
|
|
dayre="(^| )" daynum "( |$)"
|
|
}
|
|
#NR==2 { print length($0) }
|
|
NR==1 || NR==2 \
|
|
{ next }
|
|
dayre { if (match($0, dayre))
|
|
{ #print RSTART, RLENGTH, substr($0, RSTART, RLENGTH)
|
|
if (daynum<=9 || RSTART==1) RSTART-=1
|
|
exit
|
|
}
|
|
}
|
|
END { # 20/21 char width assumed
|
|
printf format, RSTART/3, substr(day, RSTART*3+1, 9)
|
|
}
|
|
' daynum=$2 format=$format -
|
|
|
|
exit 0
|