Parsing a column of text file - best practices

HI Folks -

I hope all is well! I have a business process where I manage a text file of substitution variables and their values for a target system. After updating, I run a script to push the changes to the target system.

However, I'm trying to develop a method to be able to automatically advance values without manual intervention. Obviously there may be some exceptions I need to handle in an automated fashion which is fine.

So, the advancement I need to do is week, month and year, based on what subvar it is...

Here is a portion of a sample file :

CurrentWeek,02/04/17
CurrentWeekq,"02/04/17"
CurrentPeriod,FEB17
CurrenttPeriodq,"FEB17"
1PeriodPrior,JAN17
1PeriodPriorq,"JAN17"
2PeriodPrior,DEC17
2PeriorPriorq,"DEC17"
CurrentPlanYear,FY 2017
CurrentPlanYearq,"FY 2017"

So, i'm trying to understand the best way to advance. The process runs EVERY Saturday, so as you know, the subvars pertaining to the day/week (xx/xx/xx) will always roll forward, but month and year wont until a new month or new year changes...

So this Saturday, CurrentWeek would roll forward to 2/11/17..All others would remain the same.

However on march forth, all week and MONTH subvars will advance. Years wont advance until we advance for Jan 2018.

Just looking for the best way.

Thank you!

With GNU date, you can try:

date +'CurrentWeek,%m/%d/%y
CurrentWeekq,"%m/%d/%y"
CurrentPeriod,%^b%y
CurrentPeriodq,"%^b%y"'
date +'1PeriodPrior,%^b%y
1PeriodPriorq,"%^b%y"' --date='1 month ago'
date +'2PeriodPrior,%^b%y
2PeriodPriorq,"%^b%y"' --date='2 months ago'
date +'CurrentPlanYear,FY %Y
CurrentPlanYearq,"FY %Y"'

Thank you for that reply! Unforunately, CurrentWeek isn't actually the current week. Right now, its 02/04/17.

That's where I'm struggling.

And what does "02/04/17" represent? Would be valuable to know if we want to automate anything.

My apologies, this is a new requirement for me and the data provided was outdated. Therefore, CurrentWeek actually means current week.

Since these are rolled forward every Saturday, CurrentWeek is 5/20/17.

As it looks, I'm going to try Scrutinzer's solution, but please suggest another option if there is a better way.

Thank you!

It's not just outdated, it's also inconsistent:

CurrentWeek,02/04/17
CurrentWeekq,"02/04/17"
CurrentPeriod,FEB17
CurrenttPeriodq,"FEB17"
1PeriodPrior,JAN17
1PeriodPriorq,"JAN17"
2PeriodPrior,DEC17
2PeriorPriorq,"DEC17"
CurrentPlanYear,FY 2017
CurrentPlanYearq,"FY 2017"

If the current week is in February 2017 and the previous period (where period is presumably a month) is January 2017, how is the period 2 months prior 10 months later (December 2017) instead of 2 months earlier (December 2016)?

Is this a homework assignment?

Don -

Thank you for the reply.

I'm sorry for passing along bad requirements. Our firm is now responsible for some work admins used to do at this particular client therefore I am going through and establishing automation on many pieces of intraday business processes as most of it is manual - and this is one of the tasks.

Here is the correct data set :

CurrentWeek,05/20/17
CurrentWeekq,"05/20/17"
CurrentPeriod,MAY17
CurrenttPeriodq,"MAY17"
1PeriodPrior,APR17
1PeriodPriorq,"APR17"
2PeriodPrior,MAR17
2PeriorPriorq,"MAR17"
CurrentPlanYear,FY 2017
CurrentPlanYearq,"FY 2017"

I guesss my concern is when CurrentPeriod hits Jan and then Feb and how to return prior year to return 1PeriodPrior or 2PeriodPrior.

Thank you!

So, the question boils down to what operating system are you running? (If Linux or you have access to the GNU date utility, you can use what Scrutinizer suggested. If not, do you have access to a recent version of the Korn shell (93u+ or later)? If so, you can use ksh 's printf built-in's %(format)T format specifier to do the same thing. If not, do you have perl installed. ...) We need to know the environment you're using to tell you how to get what you want as easily as possible.

1 Like

Hi Don -

Thank you.

So it's Linux, therefore I've been able to use Scrutinzer's solution with success:

echo $(date +CurrentWeek,%m/%d/%y)
echo $(date +CurrentWeekq,'"%m/%d/%y"')
echo $(date +CurrentPeriod,%^b%y)
echo $(date +CurrentPeriodq,'"%^b%y"')
echo $(date +1PeriodPrior,%^b%y)
echo $(date +1PeriodPriorq,'"%^b%y"' --date='1 month ago')
echo $(date +2PeriodPrior,%^b%y)
echo $(date +2PeriodPriorq,'"%^b%y"' --date='2 months ago')
echo $(date +CurrentPlanYear,"FY %Y")
echo $(date +CurrentPlanYearq,'"FY %Y"')

SO thank you both!

I do have a few more questions as to how to grab certain values.

Here are the additional variables:

CurrentQuarter,FY 2Q2017
CurrentQuarterq,"FY 2Q2017"
PriorQuarter,FY 1Q2017
PriorQuarterq,"FY 1Q2017"

PriorQuarterMnth1,JAN17
PriorQuarterMnth2,FAB17
PriorQuarterMnth3,MAR17
PriorQuarterMnth1q,"JAN17"
PriorQuarterMnth2q,"FEB17"
PriorQuarterMnth3q,"MAR17"

CurrentHalf,FY 1H2017
CurrentHalfq,"FY 1H2017"

I have the following code for the Current and Prior quarters, but I need help putting the output in the correct format (as shown above):

echo $(date +"%Y %m" | awk '{q=int($2/4)+1; printf("%sq%s\n", $1, q);}')
echo $(date +"%Y %m" | awk '{q=int($2/4);y=$1;if (q==0){q=4;y=y-1;}; printf("%sq%s\n", y, q);}')

As you can see, I also need help deriving PriorQuarter months 1-3.

Thank you for all your help!!

---------- Post updated 05-21-17 at 12:30 AM ---------- Previous update was 05-20-17 at 09:04 PM ----------

Hi -

Based on your suggestions, I've been able to acheeive my goal. However, I did need to use some if logic to get get there which helps with PriorQuarter Months 1-3 as well as prior year when in Quarter 1.

Please let me know if there is a better way, as I'm sure there is. Here is my code,
thanks!

_CH= Current Half
_PQ=Prior Quarter
_PQM1= Prior Quarter Month 1

echo ---------------------------------------------------------                                                                                                
echo "Advance Subvar Values"                                         
echo ---------------------------------------------------------

if [ $(($(date +%m)/4+1)) -eq 1 ]
then
    _CH=1
    _PQ=4
    _PQM1=OCT
    _PQM2=NOV
    _PQM3=DEC
    _SVYEARL=$(date +%Y --date="1 year ago")
    _SVYEARS=$(date +%y --date="1 year ago")
elif [ $(($(date +%m)/4+1)) -eq 2 ]
then
    _CH=1
    _PQM1=JAN
    _PQM2=FEB
    _PQM3=MAR
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
elif [ $(($(date +%m)/4+1)) -eq 3 ]
then
    _CH=2
    _PQM1=APR
    _PQM2=MAY
    _PQM3=JUN
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
elif [ $(($(date +%m)/4+1)) -eq 4 ]
then
    _CH=2
    _PQM1=JUL
    _PQM2=AUG
    _PQM3=SEP
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
else
    _PQ=$(($(($(date +%m)/4+1))-1))
fi

#::-- Read file contents into variables and pass to MaxL --::#

echo $(date +CurrentWeek,%m/%d/%y)
echo $(date +CurrentWeekq,'"%m/%d/%y"')
echo $(date +CurrentPeriod,%^b%y)
echo $(date +CurrentPeriodq,'"%^b%y"')
echo $(date +1PeriodPrior,%^b%y)
echo $(date +1PeriodPriorq,'"%^b%y"' --date='1 month ago')
echo $(date +2PeriodPrior,%^b%y)
echo $(date +2PeriodPriorq,'"%^b%y"' --date='2 months ago')
echo $(date +CurrentQuarter,"FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y")
echo $(date +CurrentQuarterq,'"'"FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y"'"')
echo $(date +CurrentHalfq,'"'"FY ${_CH}H%Y"'"')
echo $(date +CurrentPlanYear,"FY %Y")
echo $(date +CurrentPlanYearq,'"FY %Y"')
echo $(date +CurrentYear,"FY %Y")
echo $(date +CurrentYearq,'"FY %Y"')
echo $(date +PriorQuarterAD,AD${_PQ}-${_SVYEARS})
echo $(date +PriorQuarterADq,'"'"AD${_PQ}-${_SVYEARS}"'"')
echo $(date +PriorQuarterMnth1,"${_PQM1}${_SVYEARS}")
echo $(date +PriorQuarterMnth2,"${_PQM2}${_SVYEARS}")
echo $(date +PriorQuarterMnth3,"${_PQM3}${_SVYEARS}")
echo $(date +PriorQuarterMnth1q,'"'"${_PQM1}${_SVYEARS}"'"')
echo $(date +PriorQuarterMnth2q,'"'"${_PQM2}${_SVYEARS}"'"')
echo $(date +PriorQuarterMnth3q,'"'"${_PQM3}${_SVYEARS}"'"')
echo $(date +PriorQuarter,"FY ${_PQ}Q${_SVYEARL}")
echo $(date +PriorQuarterq,'"'"FY ${_PQ}Q${_SVYEARL}"'"')
echo $(date +CurrentQtrInput,"FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y_input")
echo $(date +CurrentQtrInputq,'"'"FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y_input"'"')
echo $(date +PriorQtrInput,"FY ${_PQ}Q${_SVYEARL}_input")
echo $(date +ALLC_CurrentWeek,%m/%d/%y)
echo $(date +ALLC_CurrentWeekq,'"%m/%d/%y"')
echo $(date +ALLC_CurrentPeriod,%^b%y)
echo $(date +ALLC_CurrentPeriodq,'"%^b%y"')

You seem to need some help calculating the quarter as well as the months in a quarter. Three are three months in a quarter; not 4. If you want to know what calendar quarter a given month is in, try:

quarter=$(((month+2)/3))

Note that if you're using bash (and some other shells) as your shell, the above calculation will fail in August and September if $month contains a leading zero. If you're using ksh , a leading zero won't be a problem. With the GNU date utility, you can get the month number without a leading zero with:

month=$(date +%-m)

or with any date utility and any shell that supports parameter substitutions required by the POSIX standards:

month=$(date +%m)
month=${month#0}

To find months 1, 2, and 3 in a quarter, try:

month1=$((quarter*3-2))
month2=$((quarter*3-1))
month3=$((quarter*3))

Second note that to work properly, I think you'd need to change two of Scrutinizer's suggestions:

echo $(date +1PeriodPrior,%^b%y)
echo $(date +1PeriodPriorq,'"%^b%y"' --date='1 month ago')
echo $(date +2PeriodPrior,%^b%y)
echo $(date +2PeriodPriorq,'"%^b%y"' --date='2 months ago')

to:

echo $(date +1PeriodPrior,%^b%y --date='1 month ago')
echo $(date +1PeriodPriorq,'"%^b%y"' --date='1 month ago')
echo $(date +2PeriodPrior,%^b%y) --date='2 months ago'
echo $(date +2PeriodPriorq,'"%^b%y"' --date='2 months ago')

Hi Don -

Thank you!

Where are you seeing 4months in a quarter for 3?

My if logic is checking what quarter I'm currently in:

if [ $(($(date +%m)/4+1)) -eq 1 ]
then

Is that what you meant?

---------- Post updated at 07:59 AM ---------- Previous update was at 07:39 AM ----------

Also, what would be the best way to derive these two values?

FirstQtrWeek,12/31/16
LastQtrWeek,03/25/17

My week starts on a Saturday.

Thanks!

Hi SIMMS7400,
No. That code had not been presented in the mail to which I responded. But we can use it for discussion now. Although the code above happens to work because there is no month zero. Let's look at the tests for the other three quarters:

if [ $(($(date +%m)/4+1)) -eq 1 ]
... # Happens to work for months 01, 02, and 03
elif [ $(($(date +%m)/4+1)) -eq 2 ]
... # Treats months 04, 05, 06, and 07 as 2nd quarter.
elif [ $(($(date +%m)/4+1)) -eq 3 ]
... # With ksh, treats months 08, 09, 10, and 11 as 3rd quarter.
... # With bash, treats months 08 and 09 as syntax errors and treats months
... #   10 and 11 as 3rd quarter.
elif [ $(($(date +%m)/4+1)) -eq 4 ]
... # With ksh, treats month 12 as 4th quarter.
... # With bash, treats 08 and 09 as syntax errors and treats 12 as 4th quarter.

Everything marked in red in the comments above look wrong to me! Do you believe that October and November should be in 3rd quarter instead of the 4th quarter? Do you believe that July should be in the 2nd quarter instead of the 3rd quarter? What shell are you using? If you're using bash , do you believe that August and September should not be in any quarter in a calendar year?

I believe that Q1 should be months January, February, and March; Q2 should be months April, May, and June; Q3 should be months July, August, and September; and Q3 should be months October, November, and December. That is not what your code does!

Define your terms!
Is FirstQtrWeek supposed to be the 1st Saturday before January 2, of the current year?

Is LastQtrWeek supposed to be the 1st Saturday before XX/02/YYYY where XX is the 1st month of the current quarter in calendar year YYYY ?

And, I repeat, what shell are you using?

Hi DOn -

Thank you for the replies! I'm operating on a AIX environment.

Since the quarter syntax is whacky, what would you suggest instead? My thoughts are to still utilize the if/elif logic, but instead use month instead. While there would be more conditions using month, it seems safer.

As far as :
FirstQtrWeek : The script should determine if it it the first Saturday of the 1st quarter month. If so, set it. If not, it needs to refer to that week until the next quarter.

& LastQtrWeek,the script should determine if it is the 3rd quarter month of the current quarter, and then determine if it is the last Saturday.

I hope I explained that well enough?

---------- Post updated at 08:50 PM ---------- Previous update was at 08:06 PM ----------

I wrote the quarter derivation portion like this:

if [[ $(date +%-m) -ge 1 && $(date +%-m) -le 3 ]]
then
    _CH=1
    _PQ=4
    _PQM1=OCT
    _PQM2=NOV
    _PQM3=DEC
    _SVYEARL=$(date +%Y --date="1 year ago")
    _SVYEARS=$(date +%y --date="1 year ago")
elif [[ $(date +%-m) -ge 4 && $(date +%-m) -le 6 ]]
then
    _CH=1
    _PQM1=JAN
    _PQM2=FEB
    _PQM3=MAR
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
    _PQ=$(($(($(date +%-m)/4+1))-1))
elif [[ $(date +%-m) -ge 7 && $(date +%-m) -le 9 ]]
then
    _CH=2
    _PQM1=APR
    _PQM2=MAY
    _PQM3=JUN
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
    _PQ=$(($(($(date +%-m)/4+1))-1))
elif [[ $(date +%-m) -ge 10 && $(date +%-m) -le 12 ]]
then
    _CH=2
    _PQM1=JUL
    _PQM2=AUG
    _PQM3=SEP
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
    _PQ=$(($(($(date +%-m)/4+1))-1))
fi

Hi SIMMS7400,
I will have to assume that you have everything under control and do not desire any further help from me. I have asked three times what shell you're using and have not received an answer. Therefore, I am unable to post a good suggested suited to your environment.

I suggested a simple way to calculate the calendar quarter from the month number (in post #10) and in that same post showed simple ways to calculate the month numbers for the three months in that quarter. Instead of using that code, you used other code that clearly calculates quarters incorrectly. (And, the code you showed us in the 1st update to post #13 still uses that incorrect calculation three out of four times when assigning values to _PQ .)

It is clear from your examples, that your definition of FirstQtrWeek and LastQtrWeek is a date that is not in that quarter with the possible exception of cases where the 1st day of a calendar quarter happens to be a Saturday. Your refusal to clearly define how those two values are calculated (instead of just giving ambiguous examples) makes it impossible to suggest code that might meet your requirements. Given that you say that 12/31/2016 is in Q12017 while your calculations (which are purely based on the month number) clearly compute that anything in December is in Q4; I have great difficulty correlating your stated requirements to your code.

I hope that some of my comments have been helpful. I won't bother you with more questions.

Hi Don -

Sorry for the confusion.

The shell I am using is bash.

I've updated how i calculated calendar quarter with your code:

_QUARTER=$(((month+2)/3))

As far as examples, here they are.

For Q1 of 2017:
FirstQtrWeek:12/31/16
LastQtrWeek: 03/25/17

For Q2 of 2017:
FirstQtrWeek:04/01/17
LastQtrWeek: 06/24/17

For Q3 of 2017:
FirstQtrWeek:07/01/17
LastQtrWeek: 09/23/17

For Q4 of 2017:
FirstQtrWeek:09/30/17
LastQtrWeek: 12/23/17

I'm sorry for the run around!

---------- Post updated at 05:23 PM ---------- Previous update was at 04:11 AM ----------

I've found out how to get the last Saturday of the quarter, however still having trouble getting the first Saturday:

GetFirstLastWeek () { 

DAY_OF_WEEK=6 # 1=Monday, ..., 7=Sunday
THE_YEAR=${_YEAR}
THE_MONTH="$1"

RESULT_DAY=0

YEAR_MONTH_STR=${THE_YEAR}"-"${THE_MONTH}  # Example value: "2017-06"

for DAYNO in 22 23 24 25 26 27 28 29 30 31
do
  DATE_TO_CHECK=${YEAR_MONTH_STR}"-"${DAYNO}
  DATE_RESULT=$(date --date=$DATE_TO_CHECK '+%u')
  if [ $? -eq 0 ]
  then
    if [ $DATE_RESULT -eq $DAY_OF_WEEK ]
    then
      RESULT_DAY=$DAYNO
    fi
  fi
done

RESULT_DATE_COMPLETE=${YEAR_MONTH_STR}"-"${RESULT_DAY}

echo $(date --date=$RESULT_DATE_COMPLETE +FirstQtrWeek,%m/%d/%Y -d "4 weeks ago")
echo $(date --date=$RESULT_DATE_COMPLETE +LastQtrWeek,%m/%d/%Y)

} > ${_SUBVARPATH}${_YEAR}_${_MONTH}${_DAY}/Subvar_List.txt

4 weeks ago from the LastQtrWeek doesn't work, obviously.

Why the scenic route? With GNU date, for the last Sunday in June (i.e. second quarter), try

date -d"2017-07-01 - $(date -d"2017-07-01" +%udays)"
So 25. Jun 00:00:00 CEST 2017

, and for the first Sat, try

date -d"2017-04-01 + $((6 - $(date -d2017-04-01 +%u)%7 )) days"
Sa 1. Apr 00:00:00 CEST 2017

Thank you, Rudi! I can't seem to get first saturday to work and I do have some concerns.

Also there is an exception which would fall on situation like September 30th, 2017. Even though it is still in 3rd uarter, it's technically the first quarter week of the 4th quarter and thus, the first Saturday. Therefore, October 7th would be the 2nd.

For instance, the first Saturday of the 4th quarter is still in September. (September 30th).

---------- Post updated at 12:53 PM ---------- Previous update was at 11:03 AM ----------

So the condition would be, unless that Saturday is the 1st, use the prior Saturday. As that would mean the first quarter week happens sometime between last sat and current Saturday - therefore use the previous sat.

OK. So we're finally coming close to a definition of how to determine the 1st Saturday in a calendar quarter and, hopefully, the last Saturday in a calendar quarter.

You seem to have now confirmed that the 1st Saturday in a calendar quarter is the 1st Saturday before the 2nd day of the first full month of that quarter (as I asked in post #12 in this thread. And I presume (although you have never defined it) that the last Saturday of a calendar quarter is the Saturday before the 1st Saturday of the next calendar quarter. For CY 2017, this would mean that:

          Last Saturday of   1st Saturday of    Last Saturday of
Quarter   Previous Quarter   Current Quarter    Current Quarter
=======   ================   ===============    ================
1Q2017       12/24/2016        12/31/2016          03/25/2017
2Q2017       03/25/2017        04/01/2017          06/24/2017
3Q2017       06/24/2017        07/01/2017          09/23/2017
4Q2017       09/23/2017        09/30/2017          12/23/2017

Are all of these correct?

Hi Don -

Thank you for the follow up. Yes those are correct- Thank you!!

Here is my script and its working as expected.

The way in which I derived the FirstQtrWeek and LastQrtWeek could probably be done cleaner, but it works.

#!/bin/bash
#::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#::-- Script Name: CS_Subvar_Advancement.sh                                   --::
#::                                                                           --::
#::-- Description: Allows functionality to advance & update Essbase Subvars   --::
#::                                                                              --::
#::                                                                              --::
#::--  Calls:      _env.sh                                                    --::
#::--  Called By:  N/A                                                        --::
#::                                                                              --::
#::-- Parameters:  Not Applicable                                               --::
#::                                                                              --::
#::-- Author:      Name (Company)                                          --::
#::-- Date:                                                                       --::
#::                                                                              --::
#::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

source /home/oracle/Hyperion_Batch/Scripts/Batch/_env.sh

#::-- Set Log & Error subdirectories pertaining to the specific process --::#
_PLOGPATH=Subvar_Logs/
_PERRORPATH=Subvar_Errors/

#::-- Establish STDOUT and STDERROR repositories --::
_INTRAPATH=${_MAINPATH}${_LOGPATH}${_PLOGPATH}${_YEAR}_${_MONTH}${_DAY}
_ERRORINTRAPATH=${_MAINPATH}${_ERRORPATH}${_PERRORPATH}${_YEAR}_${_MONTH}${_DAY}
    
mkdir -p ${_INTRAPATH}
mkdir -p ${_ERRORINTRAPATH}

#::-- Prepare File Name Format --::#
#::   _SN          = Script Name with extension
#::   ${_SN%%.sh*} = Script name without extension
#::   _FN          = File Name

_SN=${0##*/}
_FN=${_DATESTAMP}_${_TIME}_${_SN%%.sh*}

#::-- Establish STDOUT and STDERROR files --::#
_LOGFILE=${_INTRAPATH}/${_FN}.log
_ERRORFILE=${_ERRORINTRAPATH}/${_FN}.err
_MAXLLOGFILE=${_INTRAPATH}/${_FN}_MAXL.log

#::-- Direct STDOUT and STDERROR to repositories --::# 
exec 2>${_ERRORFILE} > ${_LOGFILE}

#::-- If empty, delete YYYY_MMDD error file subdirectory --::
trap "[ -s ${_ERRORFILE} ] || rm -f ${_ERRORFILE} && rmdir ${_ERRORINTRAPATH}" EXIT

#::-- Begin Script Processing --::#

PrepSubvars () {

mkdir -p ${_SUBVARPATH}${_YEAR}_${_MONTH}${_DAY}

if [ "${_QUARTER}" == 1 ]
then

GetFirstLastWeek 01 03

    _CH=1
    _PQ=4
    _PQM1=OCT
    _PQM2=NOV
    _PQM3=DEC
    _SVYEARL=$(date +%Y --date="1 year ago")
    _SVYEARS=$(date +%y --date="1 year ago")
    
elif [ "${_QUARTER}" == 2 ]
then

GetFirstLastWeek 04 06

    _CH=1
    _PQM1=JAN
    _PQM2=FEB
    _PQM3=MAR
    _PQ=1
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)

elif [ "${_QUARTER}" == 3 ]
then

GetFirstLastWeek 07 09

    _CH=2
    _PQM1=APR
    _PQM2=MAY
    _PQM3=JUN
    _PQ=2
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)

elif [ "${_QUARTER}" == 4 ]
then

GetFirstLastWeek 10 12

    _CH=2
    _PQM1=JUL
    _PQM2=AUG
    _PQM3=SEP
    _PQ=3
    _SVYEARL=$(date +%Y)
    _SVYEARS=$(date +%y)
fi
}

GetFirstLastWeek () {

#::-- Get first Saturday of the first week of the quarter --::#

DAY_OF_WEEK=6 # 1=Monday, ..., 7=Sunday
THE_YEAR=${_YEAR}
THE_MONTH="$1"

RESULT_DAY=0

YEAR_MONTH_STR=${THE_YEAR}"-"${THE_MONTH}  # Example value: "2017-06"

for DAYNO in 1 2 3 4 5 6 7
do
    DATE_TO_CHECK=${YEAR_MONTH_STR}"-"${DAYNO}
    DATE_RESULT=$(date --date=$DATE_TO_CHECK '+%u')
        if [ $? -eq 0 ]
        then
            if [ $DATE_RESULT -eq $DAY_OF_WEEK ]
            then
            RESULT_DAY=$DAYNO
            fi
        fi
done

RESULT_DATE_COMPLETE1=${YEAR_MONTH_STR}"-"${RESULT_DAY}

if [ $RESULT_DAY -ge 2 ]
then
    _FQW=$(date --date="$RESULT_DATE_COMPLETE1 - 7 days" +FirstQtrWeek,\'\\%m/%d/%Y'\'\')
else
    _FQW=$(date --date=$RESULT_DATE_COMPLETE1 +FirstQtrWeek,\'\\%m/%d/%Y'\'\')
fi

#::-- Get last Saturday of the last week of the quarter --::#

DAY_OF_WEEK=6 # 1=Monday,..., 7=Sunday
THE_YEAR=${_YEAR}
THE_MONTH="$2"

RESULT_DAY=0

YEAR_MONTH_STR=${THE_YEAR}"-"${THE_MONTH}  # Example value: "2017-06"

for DAYNO in 22 23 24 25 26 27 28 29 30 31
do
    DATE_TO_CHECK=${YEAR_MONTH_STR}"-"${DAYNO}
    DATE_RESULT=$(date --date=$DATE_TO_CHECK '+%u')
        if [ $? -eq 0 ]
        then
            if [ $DATE_RESULT -eq $DAY_OF_WEEK ]
            then
            RESULT_DAY=$DAYNO
            fi
        fi
done

RESULT_DATE_COMPLETE=${YEAR_MONTH_STR}"-"${RESULT_DAY}

}

AdvanceSubvars () {

echo $(date +CurrentWeek,\'\\%m/%d/%y'\'\')
echo $(date +CurrentWeekq,\'\\\"%m/%d/%y'\''"'\')
echo $(date +CurrentPeriod,%^b%y)
echo $(date +CurrentPeriodq,\'\\\"%^b%y'\''"'\')
echo $(date +'"1PeriodPrior"',%^b%y --date='1 month ago')
echo $(date +'"1PeriodPriorq"',\'\\\"%^b%y'\''"'\' --date='1 month ago')
echo $(date +'"2PeriodPrior"',%^b%y --date='2 months ago')
echo $(date +'"2PeriodPriorq"',\'\\\"%^b%y'\''"'\' --date='2 months ago')
echo $(date +CurrentQuarter,\'\\"FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y"'\'\')
echo $(date +CurrentQuarterq,\'\\\""FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y"'\''"'\')
echo $(date +CurrentHalfq,\'\\\""FY ${_CH}H%Y"'\''"'\')
echo $(date +CurrentPlanYear,\'\\"FY %Y"'\'\')
echo $(date +CurrentPlanYearq,\'\\\""FY %Y"'\''"'\')
echo $(date +CurrentYear,\'\\"FY %Y"'\'\')
echo $(date +CurrentYearq,\'\\\""FY %Y"'\''"'\')
echo $(date +PriorQuarterAD,\'\\"AD${_PQ}-${_SVYEARS}"'\'\')
echo $(date +PriorQuarterADq,\'\\\""AD${_PQ}-${_SVYEARS}"'\''"'\')
echo $(date +PriorQuarterMnth1,"${_PQM1}${_SVYEARS}")
echo $(date +PriorQuarterMnth2,"${_PQM2}${_SVYEARS}")
echo $(date +PriorQuarterMnth3,"${_PQM3}${_SVYEARS}")
echo $(date +PriorQuarterMnth1q,\'\\\""${_PQM1}${_SVYEARS}"'\''"'\')
echo $(date +PriorQuarterMnth2q,\'\\\""${_PQM2}${_SVYEARS}"'\''"'\')
echo $(date +PriorQuarterMnth3q,\'\\\""${_PQM3}${_SVYEARS}"'\''"'\')
echo $(date +PriorQuarter,\'\\"FY ${_PQ}Q${_SVYEARL}"'\'\')
echo $(date +PriorQuarterq,\'\\\""FY ${_PQ}Q${_SVYEARL}"'\''"'\')
echo $(date +CurrentQtrInput,\'\\"FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y_input"'\'\')
echo $(date +CurrentQtrInputq,\'\\\""FY $(expr $(expr $(date -d '-1 month' +%m) - 1) / 3 + 1)Q%Y_input"'\''"'\')
echo $(date +PriorQtrInput,\'\\"FY ${_PQ}Q${_SVYEARL}_input"'\'\')
echo $(date +ALLC_CurrentWeek,\'\\%m/%d/%y'\'\')
echo $(date +ALLC_CurrentWeekq,\'\\\"%m/%d/%y'\''"'\')
echo $(date +ALLC_CurrentPeriod,%^b%y)
echo $(date +ALLC_CurrentPeriodq,\'\\\"%^b%y'\''"'\')
echo $_FQW
echo $(date --date=$RESULT_DATE_COMPLETE +LastQtrWeek,\'\\%m/%d/%Y'\'\')

#::-- VARIABLES REQUIRING MANUAL SETTING TWICE A YEAR BELOW --::#

echo ES3CurrentSeedPlanq,\'\\\"Budget Base'\''"'\'
echo CurrentPlan,'\"Q3 Forecast\"'
echo CurrentPlanq,\'\\\"Q3 Forecast'\''"'\'
echo CurrentSeedPlanq,\'\\\"Budget Base'\''"'\'

} > ${_SUBVARPATH}${_YEAR}_${_MONTH}${_DAY}/Subvar_List.txt

echo ---------------------------------------------------------
echo "${_SN} beginning at ${_TIME}"                           
echo ---------------------------------------------------------

echo ---------------------------------------------------------                                                                                                
echo "Prepare Subvars"                                         
echo ---------------------------------------------------------

PrepSubvars

_RVAL=$?

if [ $_RVAL -eq 0 ]
then
    echo ---------------------------------------------------------
    echo "Prepare Subvars : Successful"                           
    echo ---------------------------------------------------------
  
else
    echo ---------------------------------------------------------
    echo "Prepare Subvars : Unsuccessful"                      
    echo ---------------------------------------------------------
    exit 1
fi

echo ---------------------------------------------------------                                                                                                
echo "Advance Subvar Values"                                         
echo ---------------------------------------------------------

AdvanceSubvars

_RVAL=$?

if [ $_RVAL -eq 0 ]
then
    echo ---------------------------------------------------------
    echo "Advance Subvar Values : Successful"                           
    echo ---------------------------------------------------------
  
else
    echo ---------------------------------------------------------
    echo "Advance Subvar Values : Unsuccessful"                      
    echo ---------------------------------------------------------
    exit 1
fi

echo ---------------------------------------------------------                                                                                                
echo "Update Subvars on ${_ESSB_SRVR}"                                         
echo ---------------------------------------------------------

#::-- Save of previous Subvar file for records --::#

pushd ${_SUBVARPATH}${_YEAR}_${_MONTH}${_DAY}
cp Subvar_List.txt ${_TIME}_Subvar_List.txt
popd

#::-- Read file contents into variables and pass to MaxL --::#

while IFS=',' read col1 col2
do

export subvar=$col2

_MAXLLOGFILE=${_INTRAPATH}/${_FN}_${col1}_MAXL.log

. ${_STARTMAXLPATH} ${_MAXLSCRIPTPATH}Update_Subvars.mxl ${_ESSB_USER} ${_ESSB_PSWD} ${_ESSB_SRVR} ${_MAXLLOGFILE} $col1 $subvar

done < ${_SUBVARPATH}${_YEAR}_${_MONTH}${_DAY}/Subvar_List.txt

_RVAL=$?

if [ $_RVAL -eq 0 ]
then
    echo ---------------------------------------------------------
    echo "Update Subvars on ${_ESSB_SRVR} : Successful"                           
    echo ---------------------------------------------------------
  
else
    echo ---------------------------------------------------------
    echo "Update Subvars on ${_ESSB_SRVR} : Unsuccessful"                      
    echo ---------------------------------------------------------
    exit 1
fi
  
echo
echo ---------------------------------------------------------                                                                                                
echo "${_SN} - Completed Successfully"
echo
echo "Normal Exit"                                        
echo ---------------------------------------------------------
exit 0

---------- Post updated at 05:50 AM ---------- Previous update was at 05:49 AM ----------

Also, all the escape characters and slashes are required format to load the value into my target system.