input file test.csv has following structure.
SCHEM1.TAB1;COL1;DATATYPE;NOTNULL--
SCHEMA1.TAB1;COL2;DATATYPE;NOTNULL;WITH DEFAULT;--
....
SCHEMA1.TABn;COL1;DATATYPE;NOTNULL;WITH DEFAULT;
i started using awk but text is not tab seperated.its just ; seperated.
how to print
output should be:
ALTER TABLE SCHEMA1.TAB1 add COL1 DATATYPE NOTNULL;
ALTER TABLE SCHEMA1.TAB1 add COL2 DATATYPE NOTNULL WITHDEFAULT;
....
ALTER TABLE SCHEMA1.TABn add COL DATATYPE NOTNULL WITHDEFAULT;
zaxxon
2
That is no problem for awk since you can specify a different, even multiple and reg exp as delimeters. Try:
awk -F";" '......
Sheel
3
#!/bin/ksh
INPUTFILE=InputFile.csv
while read inputline
do
column1="$(echo $inputline | cut -d';' -f1)"
echo column1 = $column1 ;
column2="$(echo $inputline | cut -d';' -f2)"
echo column2 = $column2 ;
column3="$(echo $inputline | cut -d';' -f3)"
echo column3 = $column3 ;
column4="$(echo $inputline | cut -d';' -f4)"
echo column4 = $column4 ;
column5="$(echo $inputline | cut -d';' -f5)"
echo column5 = $column5 ;
db2 "ALTER TABLE ${column1} add ${column2} DATATYPE ${column3} ${column4} ${column5}"
done < $INPUTFILE
If You want to use 'awk' ::
column1=`echo "$inputline" | awk -F';' '{print $1}'`
column2=`echo "$inputline" | awk -F';' '{print $2}'`
column3=`echo "$inputline" | awk -F';' '{print $3}'`
column4=`echo "$inputline" | awk -F';' '{print $4}'`
column5=`echo "$inputline" | awk -F';' '{print $5}'`
Keep on incrementing the inputline number , so that the command is executed once for every input line.
Can try with sed:
$ cat temp.txt
SCHEM1.TAB1;COL1;DATATYPE;NOTNULL--
SCHEMA1.TAB1;COL2;DATATYPE;NOTNULL;WITH DEFAULT;--
....
SCHEMA1.TABn;COL1;DATATYPE;NOTNULL;WITH DEFAULT;
$ sed -e 's/\(.*\)/\ALTER TABLE \1/' -e 's/;/ /g' -e 's/--/;/' temp.txt
ALTER TABLE SCHEM1.TAB1 COL1 DATATYPE NOTNULL;
ALTER TABLE SCHEMA1.TAB1 COL2 DATATYPE NOTNULL WITH DEFAULT ;
ALTER TABLE ....
ALTER TABLE SCHEMA1.TABn COL1 DATATYPE NOTNULL WITH DEFAULT
Or try..
sed 's/\([^; ]*\) \([^; ]*\)/\1\2/g;s/[;-]/ /g;s/^\([^ ]*\) \(.*\)/ALTER TABLE \1 add \2;/' inputfile