Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Parsing a column of text file - best practices Post 302998286 by SIMMS7400 on Monday 29th of May 2017 05:50:24 AM
Old 05-29-2017
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.

Code:
#!/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.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Text File Parsing

Hey Guys.I am a newbie on Bash Shell Scripting and Perl.And I have a question about file parsing. I have a log file which contains reports about a communication device.I need to take some of the reports from the log file.Its hard to explain the issue.but shortly I can say that, the reports has a... (2 Replies)
Discussion started by: Djlethal
2 Replies

2. Shell Programming and Scripting

Parsing text from file

Any ideas? 1)loop through text file 2)extract everything between SOL and EOL 3)output files, for example: 123.txt and 124.txt for the file below So far I have: sed -n "/SOL/,/EOL/{p;/EOL/q;}" file Here is an example of my text file. SOL-123.go something goes here something goes... (0 Replies)
Discussion started by: ndnkyd
0 Replies

3. Shell Programming and Scripting

Column wise file parsing.

Shell script for the below operation : File "A" contains : SEQ++1' MOA+9:000,00:ABC' RFF+AIK:000000007' FII+PH+0170++AA' NAD+PL+++XXXXXXXXXXX XXXXXXX XX++XXX XXXX XXXX X.X. XXXXXXXXX+++NL' SEQ++2' MOA+9:389,47:ABC' RFF+AIK:02110300000008' FII+PH+0PSTBNL2A:25:5+BB'... (5 Replies)
Discussion started by: navojit dutta
5 Replies

4. Shell Programming and Scripting

Need help parsing a text file

I have a text file: router1#sh ip blah blah | incl --- Gi2/8 10.60.4.181 --- 10.60.123.175 11 0000 0000 355K Gi2/8 10.60.83.28 --- 224.10.10.26 11 F9FF 3840 154K Gi2/8 10.60.83.198 --- ... (1 Reply)
Discussion started by: streetfighter2
1 Replies

5. UNIX for Dummies Questions & Answers

Replacing a specific column of a text file with another column

I have a text file in the following format: 13412 NA06985 0 0 2 46.6432798439 4 4 4 4 13412 NA06991 NA06993 NA06985 2 48.8478948517 4 4 2 4 13412 NA06993 0 0 1 45.8022601455 4 4 2 4 13401 NA06994 0 0 1 48.780669145 4 4 4 4 13401 NA07000 0 0 2 47.7312017846 2 4 4 4 13402 NA07019... (3 Replies)
Discussion started by: evelibertine
3 Replies

6. UNIX for Dummies Questions & Answers

Replacing a specific column of a text file with another column

Hi, I have a text file in the following format: Code: 13412 NA06985 0 0 2 46.6432798439 4 4 4 4 13412 NA06991 NA06993 NA06985 2 48.8478948517 4 4 2 4 13412 NA06993 0 0 1 45.8022601455 4 4 2 4 13401 NA06994 0 0 1 48.780669145 4 4 4 4 13401 NA07000 0 0 2 47.7312017846 2 4 4 4 ... (2 Replies)
Discussion started by: evelibertine
2 Replies

7. Programming

Parsing a Text file using C++

I was trying to parse the text file, which will looks like this ###XYZABC#### ############ int = 4 char = 1 float = 1 . . ############ like this my text file will contains lots of entries and I need to store these entries in the map eg. map.first = int and map.second = 4 same way I... (5 Replies)
Discussion started by: agupta2
5 Replies

8. Shell Programming and Scripting

Parsing text file

I'm totally stumped with how to handle this huge text file I'm trying to deal with. I really need some help! Here is what is looks like: ab1ba67c331a3d731396322fad8dd71a3b627f89359827697645c806091c40b9 0.2 812a3c3684310045f1cb3157bf5eebc4379804e98c82b56f3944564e7bf5dab5 0.6 0.6... (3 Replies)
Discussion started by: comp8765
3 Replies

9. Shell Programming and Scripting

Parsing text file

Hi Friends, I am back for the second round today - :D My input text file is this way Home friends friendship meter Tools Mirrors Downloads My Data About Us Help My own results BLAT Search Results ACTIONS QUERY SCORE START END QSIZE IDENTITY CHRO STRAND ... (7 Replies)
Discussion started by: jacobs.smith
7 Replies

10. Shell Programming and Scripting

Parsing a fixed column text file in sed

I have a text file with records of the form: A X1 Y1 X2 Y2 X3 Y3 where A is character length 10, Xi is character length 4 and Yi is numeric length 10. I want to parse the line, and output records like: A X1 Y1 A X2 Y2 A X3 Y3 etc Can anyone please give me an idea of how to do this. ... (4 Replies)
Discussion started by: wvdeijk
4 Replies
All times are GMT -4. The time now is 12:38 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy