Bruble
June 10, 2010, 9:58am
1
Hi All,
I am trying to alter all lines between EXEC SQL and END-EXEC that have an INCLUDE in them.
The following code
search="INCLUDE "
cp -f ${WORK}/$file.in ${WORK}/$file.wrk2
for item in `echo $search `; do
> ${WORK}/$file.wrk1
awk -vITEM="$item" '{
if ( $0 ~ ITEM ) {
savetext = substr($0,1,80);
col7 = substr($0,7,1);
print "MIGAU1" col7 " BEGIN DECLARE SECTION"
print "MIGAU1" col7 " END-EXEC."
print "MIGAU1" col7 " EXEC SQL"
print savetext
print "MIGAU1" col7 " END-EXEC."
print "MIGAU1" col7 " EXEC SQL"
print "MIGAU1" col7 " END DECLARE SECTION"
}
else { print $0 }
}' ${WORK}/$file.wrk2 >> ${WORK}/$file.wrk1
works to alter the lines containing include but now I want to include the following pattern matching
awk '/EXEC SQL/,/END-EXEC/' filein
I have tried
search="INCLUDE "
cp -f ${WORK}/$file.in ${WORK}/$file.wrk2
for item in `echo $search `; do
> ${WORK}/$file.wrk1
awk '/EXEC SQL/,/END-EXEC/' || -vITEM="$item" '{
if ( $0 ~ ITEM ) {
savetext = substr($0,1,80);
col7 = substr($0,7,1);
print "MIGAU1" col7 " BEGIN DECLARE SECTION"
print "MIGAU1" col7 " END-EXEC."
print "MIGAU1" col7 " EXEC SQL"
print savetext
print "MIGAU1" col7 " END-EXEC."
print "MIGAU1" col7 " EXEC SQL"
print "MIGAU1" col7 " END DECLARE SECTION"
}
else { print $0 }
}' ${WORK}/$file.wrk2 >> ${WORK}/$file.wrk1
and various other things but the script just hangs when I do this.
Any help appreciated.
Please post sample input and an example of the desired output.
Bruble
June 10, 2010, 10:23am
3
* | |TABLE. |V02.05 *
* 02022010 | JHH |R10.2 SR8644 DYNAMICALLY SET |V02.06 *
* | |ACTIVITY FLAGS |V02.06 *
* | |IPARM AMENDED TO INCLUDE OFFSET|V02.06 *
*****************************************************************
V01.02
V01.02 01 FILLER PIC X(32)
V01.02 VALUE 'MHAA5J - CM_COSTELEMENT_SPLIT'.
V01.02 EXEC SQL
V01.02 INCLUDE MHRSCV01
V01.02 END-EXEC.
V01.02
V01.02 01 FILLER PIC X(32)
V01.02 VALUE 'MHAA5J - CM_DIV_PROD_ACTIVITY'.
V01.02 EXEC SQL
V01.02 INCLUDE MHRDAV01
V01.02 END-EXEC.
The first include must not be altered but the EXEC SQL .... END_EXEC statements containing the INCLUDE should be altered (Result shown below):
* | |TABLE. |V02.05 *
* 02022010 | JHH |R10.2 SR8644 DYNAMICALLY SET |V02.06 *
* | |ACTIVITY FLAGS |V02.06 *
* | |IPARM AMENDED TO INCLUDE OFFSET|V02.06 *
*****************************************************************V01.02
V01.02 01 FILLER PIC X(32)
V01.02 VALUE 'MHAA5J - CM_COSTELEMENT_SPLIT'.
MIGAU1 EXEC SQL
MIGAU1 BEGIN DECLARE SECTION
MIGAU1 END-EXEC
V01.02 EXEC SQL
V01.02 INCLUDE MHRSCV01
V01.02 END-EXEC.
MIGAU1 EXEC SQL
MIGAU1 END DECLARE SECTION
MIGAU1 END-EXEC
V01.02
V01.02 01 FILLER PIC X(32)
V01.02 VALUE 'MHAA5J - CM_DIV_PROD_ACTIVITY'.
MIGAU1 EXEC SQL
MIGAU1 BEGIN DECLARE SECTION
MIGAU1 END-EXEC
V01.02 EXEC SQL
V01.02 INCLUDE MHRDAV01
V01.02 END-EXEC.
MIGAU1 EXEC SQL
MIGAU1 END DECLARE SECTION
MIGAU1 END-EXEC
Use gawk, /usr/xpg4/bin/awk or nawk on Solaris:
awk 'BEGIN {
b = "MIGAU1\tEXEC SQL\nMIGAU1\t\t"
b = b "BEGIN DECLARE SECTION\nMIGAU1\tEND-EXEC"
e = "MIGAU1\tEXEC SQL\nMIGAU1\t\tEND DECLARE SECTION"
e = e "\nMIGAU1\tEND-EXEC"
}
/EXEC SQL/ { print b }
666
/END-EXEC/ { print e }
' infile
Edit: Just saw the "containing include" part, work in progress ...
---------- Post updated at 05:21 PM ---------- Previous update was at 05:10 PM ----------
Use gawk or /usr/xpg4/bin/awk on Solaris:
awk 'BEGIN {
b = "MIGAU1\tEXEC SQL\nMIGAU1\t\t"
b = b "BEGIN DECLARE SECTION\nMIGAU1\tEND-EXEC"
e = "MIGAU1\tEXEC SQL\nMIGAU1\t\tEND DECLARE SECTION"
e = e "\nMIGAU1\tEND-EXEC"
}
/EXEC SQL/, /END-EXEC/ {
r = r ? r RS $0 : $0
/INCLUDE/ && ok ++
if (/END-EXEC/) {
if (ok) {
print b RS r RS e
r = ok = x
}
else {
print r; r = x
}
}
next
}-3' infile
1 Like