I wanted to create an automated script that will output a create table statement in unix. Below is the input and the desired output:
INPUT:
desc ZZ_APL_TIDDATELIST
(
TID NUMBER
AEX_DATE TIMESTAMP(6)
)
desc ZZ_APL_TIDLIST
(
TID NUMBER
)
desc ZZ_APL_TIDTYPELIST
(
TID NUMBER
INSTYPE VARCHAR2(3)
)
desc ZZ_CAM_AEORDER
(
ORDER_ID NUMBER
)
desc ZZ_CAM_AETID
(
TID NUMBER
INSTRUMENT_GROUP_ABBREV CHAR(3)
INSTRUMENT_TYPE_ID NUMBER
)
desc ZZ_OM_WRK_TABLE
(
TIME DATE
PLACED NUMBER
RUNNING_PLACED NUMBER
FILLED NUMBER
RUNNING_FILLED NUMBER
)
OUTPUT:
desc ZZ_APL_TIDDATELIST
(
TID NUMBER;
AEX_DATE TIMESTAMP(6)
);
desc ZZ_APL_TIDLIST
(
TID NUMBER
);
desc ZZ_APL_TIDTYPELIST
(
TID NUMBER;
INSTYPE VARCHAR2(3)
);
desc ZZ_CAM_AEORDER
(
ORDER_ID NUMBER
);
desc ZZ_CAM_AETID
(
TID NUMBER;
INSTRUMENT_GROUP_ABBREV CHAR(3);
INSTRUMENT_TYPE_ID NUMBER
);
desc ZZ_OM_WRK_TABLE
(
TIME DATE;
PLACED NUMBER;
RUNNING_PLACED NUMBER;
FILLED NUMBER;
RUNNING_FILLED NUMBER
);
awk '{
sub(/^\)/,"&;") # Replace ")" with ");"
s=($0~/^[A-Z]/&& a~/^[A-Z]/ && !/^desc/)?",":"" # IF this line and previous line start with "A-Z" and not "desc" set "s" to "," else set it to ""
printf s"\n%s",$0 # Print this line "$0" using "s" as formating pluss new line
a=$0} # set a=this line
END {
print ""}' file # print a new line