Solved

# substr-awk problem

Posted on 2003-11-21
755 Views
Hi,
I am not a unix specialist but I need a script to resolve my problem. I know the algorithm but I don’t know to write this using awk in my script.
I want to have something like this:

If substr(\$6, length(\$6-1) =”_” then
TBL=\$6\$REG_TBL
Else
TBL=substr(\$6,1,18)\$REG_TBL”_DM”
endif

P.S.  I take \$6 from rfsh.env file
0
Question by:ersatz

LVL 24

Expert Comment

ID: 9801954
could u post a simple example with all the values fill in.
ii can not understand the question.
0

LVL 51

Expert Comment

ID: 9802262
> substr(\$6, length(\$6-1)
returns a string >= 0 characters
did you probably mean
substr(\$6,length(\$6))

Then it's something like this:

{ REG_TBL_DM='irgendein ersatz'; REG_TBL='ersetzen';
if (substr(\$6,length(\$6)) == "_"){
TBL=\$6REG_TBL
} else {
TBL=substr(\$6,1,18)\$REG_TBL_DM
}
0

LVL 9

Expert Comment

ID: 9802542

I think he means ..................

if last char of \$6 is "_"  then  table name will be \$6\$REG_TBL
otherwise It will be "first 18 char of \$6" + \$REG_TBL + "_DM"

0

Author Comment

ID: 9807444
Hi,
You have right,I made a mistake.
My 6th column contains a variable string.
Example of this field value: F4REP_ACCOUNT_OUT_
or                            F4REP_ACCOUNT_OUT_ _DM.
REG_TBL=MMFSA
If substr(\$6, length(\$6-1), 1) =”_” then
TBL=\$6\$REG_TBL                      (\$6 concatenate with \$REG_TBL)
Else
TBL=substr(\$6,1,18)\$REG_TBL”_DM”   (substr(\$6,1,18) concatenate with \$REG_TBL concatenate with  "_DM"
endif
Thanks again
0

LVL 24

Accepted Solution

shivsa earned 125 total points
ID: 9807842
#!/bin/ksh
set +x

six=F4REP_ACCOUNT_OUT_
REG_TBL=MMFSA
REG_TBL_DM=MMFSA_DM

TBL=`echo "\$six \$REG_TBL" | awk '{
if (substr(\$1,length(\$1)) == "_"){
print \$1 \$2;
} else {
print substr(\$1,1,18) \$2 "_DM";
}
}'`
echo \$TBL
0

LVL 51

Expert Comment

ID: 9816655
if the answer was just worth a B grading, what is more worth than mine?
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question