Pointers on writing a unix script

Hi All,

I am writing a unix shell script. I have a file called Results.txt which stores 4 fields separated by pipe. i.e. a pipe delimited file. I want to loop through each record of this file and store each of these 4 fields into variables. I have read can be done through awk but I have never worked on unix. Any immediate help would be highly appreciated. Please help.

Regards,
Shweta

What are you trying to do? What is the input? What is the expected output? What have you done so far?

I have a file Results.txt
format as below
FEED_ID| FEED_DESCRIPTION|FILE NAMES|NUMBER OF FILES
374|Jane - Sensitivities (EUI8)|SYCEUI8_yyyyMMdd_RISK.CSV, SYCEUI8_yyyyMMdd_PCA.CSV, RMMEUI8_yyyyMMdd_ORIGINAL_Details.CSV|3
472|Jane - Sensitivities (PRP2)|SYCPRP2_yyyyMMdd_RISK.CSV, SYCPRP2_yyyyMMdd_PCA.CSV, RMMPRP2_yyyyMMdd_ORIGINAL_Details.CSV|3
.

I want to loop through each record of this file and store each field as variables so that I can use them to pass as parameters to further part of my script

I want to create such a loop that I can pass each feild of this Results.txt as a parameter to an xml filw which i am using in next part of my script.

Please help

A simple example that will reverse the order of the fields (pure shell):

while IFS='|' read ID DESC FILENAME FILENUM
do
    echo $FILENUM"|"$FILENAME"|"$DESC"|"$ID
done < Results.txt

Hi there

Thanks for the reply.
Suppose I have to pass the FEED_ID as a paramtere to the below xml as a value for JOBNAME how do I go about it. This is very urgent for me. Please advise.

<DEFJOB><JOB APR="1" AUG="1" DEC="1" FEB="1" JAN="1" JUL="1" JUN="1" MAR="1" MAY="1" NOV="1" OCT="1" SEP="1" GROUP="RATES_FILEWATCH" OWNER="rdsprod" RETRO="0" SHIFT="IGNOREJOB" SYSDB="0" AUTHOR="drutter" CYCLIC="0" NODEID="rds" TIMETO=">" CMDLINE="/app/ControlMagent6.2/prod/PLNSHCTM03/exe/ctmfw /app/data/rds/PLNMARS4/todo/SYCLEX_%%$ODATE._RISK.CSV CREATE 0 30 200 3 600 Y " CONFIRM="0" JOBNAME="RDS1084001" MAXDAYS="0" MAXRUNS="0" MAXWAIT="5" MEMLIB="" MEMNAME="" AUTOARCH="0" CRITICAL="0" INTERVAL="00030M" MAXRERUN="0" SHIFTNUM="+00" TASKTYPE="Command" TIMEFROM="2150" WEEKDAYS="1,2,3,4,5 " DATACENTER="PLNSHCTM03" IND_CYCLIC="START" TABLE_NAME="RDS_CREDITPRODUCTS" ADJUST_COND="N" APPLICATION="RDS" DAYS_AND_OR="AND" DESCRIPTION="Filewatch Jane LEX Risk" MULTY_AGENT="N" CHANGE_USERID="drutter" CREATION_DATE="20060517" CREATION_TIME="110744" CREATION_USER="drutter">
<ON CODE="
" STMT="*">
<DOSYSOUT PAR="/app/log/rds/%%JOBNAME..%%DATE.%%TIME" OPTION="Copy"/>
</ON>
<OUTCOND NAME="RDS-RDS1084001D-OK" ODATE="ODAT" SIGN="ADD"/><SHOUT WHEN="EXECTIME" TIME="" DEST="RDS_SUPPORT" URGENCY="V" MESSAGE="%%JOBNAME OVERRUNNING REVIEW DOC"/></JOB>

Hi,

The following snippet may help you. Lets say you have a file OrdersPerSecond.txt with three columns and a few rows and you need to store each column field into a variable which then can be inserted in a tab formatted excel.
You perhaps could use the following simple loop.

 
#!/bin/ksh

cat $HOME/OrdersPerSecond.txt | while read line
do
FEILD1=`echo $line |awk '{print $1}'`
FEILD2=`echo $line |awk '{print $2}'`
FEILD3=`echo $line |awk '{print $3}'`
 
echo "$FEILD1 \t $FEILD2 \t $FEILD3" >> OrdersPerSecond.xls
done

Cheers
Sumedha

Thanks Sumedha

Can you also point out how to pass the values as variables to the xml I gave above

I am trying to execute the below as a pat of shell script however the file is always bein created with no results from this part

<<
cat >> $CNTRL_M_FILE <<EOF
<DEFJOB>
        <JOB APR="1" AUG="1" DEC="1" FEB="1" JAN="1" JUL="1" JUN="1" MAR="1" MAY="1" NOV="1" OCT="1" SEP="1" GROUP="RATES_FILEWATCH" OWNER="rdsprod" RETRO="0" SHIFT="IGNOREJOB" SYSDB="0" AUTHOR="drutter" CYCLIC="0" NODEID="rds" TIMETO=">" CMDLINE="/app/ControlMagent6.2/uat/DLNSHCTM03/exe/ctmfw /app/data/rds/PLNMARS4/todo/SYCLEX_%%$ODATE._RISK.CSV CREATE 0 30 200 3 600 Y " CONFIRM="0" JOBNAME="RDS||`echo "$FEILD1"`||1" MAXDAYS="0" MAXRUNS="0" MAXWAIT="5" MEMLIB="" MEMNAME="" AUTOARCH="0" CRITICAL="0" INTERVAL="00030M" MAXRERUN="0" SHIFTNUM="+00" TASKTYPE="Command" TIMEFROM="2150" WEEKDAYS="1,2,3,4,5 | " DATACENTER="DLNSHCTM03/" IND_CYCLIC="START" TABLE_NAME="RDS_CREDITPRODUCTS" ADJUST_COND="N" APPLICATION="RDS" DAYS_AND_OR="AND" DESCRIPTION=`echo "$FEILD2"` MULTY_AGENT="N" CHANGE_USERID="drutter" CREATION_DATE=`echo "$(date +%Y%m%d)"` CREATION_TIME=`echo "$(date +%l%M%S)"` CREATION_USER="drutter">
                <ON CODE="*" STMT="*">
                        <DOSYSOUT PAR="/app/log/rds/%%JOBNAME..%%DATE.%%TIME" OPTION="Copy"/>
                </ON>
                <OUTCOND NAME="RDS-RDS1084001D-OK" ODATE="ODAT" SIGN="ADD"/>
                <SHOUT WHEN="EXECTIME" TIME="" DEST="RDS_SUPPORT" URGENCY="V" MESSAGE="%%JOBNAME OVERRUNNING REVIEW DOC"/>
        </JOB>
EOF
>>
 

Complete script if needed

#!/bin/sh
CNTRL_M_FILE=/app/fao/rds/bin/ControlM_Main.xml
echo "<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE DEFJOB SYSTEM "defjob.dtd">" > $CNTRL_M_FILE
FEILD1=`awk -F"|" '{print $1}' Results.txt`
FEILD2=`awk -F"|" '{print $2}' Results.txt`
FEILD3=`awk -F"|" '{print $3}' Results.txt`
FEILD4=`awk -F"|" '{print $4}' Results.txt`
echo "$FEILD1"
echo "$FEILD4"
cat >> $CNTRL_M_FILE <<EOF
<DEFJOB>
        <JOB APR="1" AUG="1" DEC="1" FEB="1" JAN="1" JUL="1" JUN="1" MAR="1" MAY="1" NOV="1" OCT="1" SEP="1" GROUP="RATES_FILEWATCH" OWNER="rdsprod" RETRO="0" SHIFT="IGNOREJOB" SYSDB="0" AUTHOR="drutter" CYCLIC="0" NODEID="rds" TIMETO=">" CMDLINE="/app/ControlMagent6.2/uat/DLNSHCTM03/exe/ctmfw /app/data/rds/PLNMARS4/todo/SYCLEX_%%$ODATE._RISK.CSV CREATE 0 30 200 3 600 Y " CONFIRM="0" JOBNAME="RDS||`echo "$FEILD1"`||1" MAXDAYS="0" MAXRUNS="0" MAXWAIT="5" MEMLIB="" MEMNAME="" AUTOARCH="0" CRITICAL="0" INTERVAL="00030M" MAXRERUN="0" SHIFTNUM="+00" TASKTYPE="Command" TIMEFROM="2150" WEEKDAYS="1,2,3,4,5 | " DATACENTER="DLNSHCTM03/" IND_CYCLIC="START" TABLE_NAME="RDS_CREDITPRODUCTS" ADJUST_COND="N" APPLICATION="RDS" DAYS_AND_OR="AND" DESCRIPTION=`echo "$FEILD2"` MULTY_AGENT="N" CHANGE_USERID="drutter" CREATION_DATE=`echo "$(date +%Y%m%d)"` CREATION_TIME=`echo "$(date +%l%M%S)"` CREATION_USER="drutter">
                <ON CODE="*" STMT="*">
                        <DOSYSOUT PAR="/app/log/rds/%%JOBNAME..%%DATE.%%TIME" OPTION="Copy"/>
                </ON>
                <OUTCOND NAME="RDS-RDS1084001D-OK" ODATE="ODAT" SIGN="ADD"/>
                <SHOUT WHEN="EXECTIME" TIME="" DEST="RDS_SUPPORT" URGENCY="V" MESSAGE="%%JOBNAME OVERRUNNING REVIEW DOC"/>
        </JOB>
EOF