Create table


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Create table
# 22  
Old 06-21-2010
The script works fine for me with your input file :
Code:
create table tablename(
  ID number(7),
  ID2 number(4),
  ID3 number(8),
  ID4 varchar2(50),
  ID5 varchar2(50),
  ID6 varchar2(50)
);

If you want to parameterize the table name, modify your script like that :
Code:
file=$1
table=$2
awk -F'|' '
. . . . . .
END {
   print "create table " TableName "("
   for ( c=1; c<=colCount; c++ ) {
. . . . . .
   print ");";
}
' TableName=$2 $file

Jean-Pierre.
# 23  
Old 06-22-2010
Hi Aigless
I am still having issue with last column ,I modified the script as you suggested.OS is linux

Code:
a5.sh 

file=$1
table=$2
awk -F'|' '
. . . . . .
END {
   print "create table " TableName "("
   for ( c=1; c<=colCount; c++ ) {
. . . . . .
   print ");";
}
' TableName=$2 $file

Code:
./a5.sh a2.csv xx
create table xx(
  ID number(7),
  ID2 number(4),
  ID3 number(8),
  ID4 varchar2(50),
  ID5 varchar2(50),
 varchar2(50)
);

Regards,
MR

Last edited by mohan705; 06-22-2010 at 05:03 AM..
# 24  
Old 06-22-2010
For debugging purpose, modify your script (colored lines) :
Code:
file=$1
table=$2
awk -F'|' '
BEGIN {
   colDefaultLength = 1;
}
{ printf "Record %d [%s]\n", NR, $0 }
NR==1 {
   for ( c=1; c<=NF; c++ ) {
      colName[c] = $c;
   }
   colCount = NF;
if (!colName[colCount]) print "No name for last column " colCount;
   if (!colName[colCount]) colCount--;
print "Column list:"
for (c=1; c<=colCount; c++) printf "  %d [%s]\n", c, colName[c];

   next;
}
{
   for ( c=1; c<=NF; c++ ) {
      if (length($c) > colLength[c]) colLength[c] = length($c);
           if ( $c ~ /^ *$/ )                     continue;
           if ( $c ~ /^[0-9]+$/        )          colIsNum[c]++
      else if ( $c ~ /^[0-9]*\.[0-9]*$/ )         colIsDec[c]++
      else if ( $c ~ /^[0-9]+\/[0-9]+\/[0-9]+$/ ) colIsDat[c]++
      else                                        colIsTxt[c]++;
   }
}
END {
printf "END Column list:"
for (c=1; c<=colCount; c++) printf "  %d [%s] len=%d\n", c, colName[c], colLength[c];

   print "create table " TableName "("
   for ( c=1; c<=colCount; c++ ) {

      if ( colName[c] == "" ) {
         if (colLength[c]+0 == 0) {
            continue;
         } else {
            colName[c] = "Column" c;
         }
      }


      if ( colLength[c]+0 == 0 ) colLength[c] = colDefaultLength;
      var2Len = colLength[c];
           if (var2Len <   50) var2Len = 50
      else if (var2Len <  100) var2Len = 100
      else if (var2Len <  500) var2Len = 500
      else if (var2Len < 1000) var2Len = 1000;

      out = "  " colName[c];
           if ( colIsTxt[c] ) out = out " varchar2(" var2Len ")"
      else if ( colIsDat[c] ) out = out " date"
      else if ( colIsDec[c] ) out = out " number(38,4)"
      else if ( colIsNum[c] ) out = out " number(" colLength[c] ")"
      else                    out = out " varchar2(" var2Len ")";
      if ( c != colCount ) out = out ",";

      print out

   }
   print ");";
}
' TableName=$table $file

With your input data file
Code:
ID|ID2|ID3|ID4|ID5|ID6
7666303|7666|73037341|XXX|XXXX-YYYY/Z|

Code:
$ ./mohan4.sh mohan4.txt xx
Record 1 [ID|ID2|ID3|ID4|ID5|ID6]
Column list:
  1 [ID]
  2 [ID2]
  3 [ID3]
  4 [ID4]
  5 [ID5]
  6 [ID6]
Record 2 [7666303|7666|73037341|XXX|XXXX-YYYY/Z|]
END Column list:  1 [ID] len=7
  2 [ID2] len=4
  3 [ID3] len=8
  4 [ID4] len=3
  5 [ID5] len=11
  6 [ID6] len=0
create table xx(
  ID number(7),
  ID2 number(4),
  ID3 number(8),
  ID4 varchar2(50),
  ID5 varchar2(50),
  ID6 varchar2(50)
);
$

Execute the modified script and post the output.


Jean-Pierre.
# 25  
Old 06-22-2010
Hi
Executed the script .Still having issue from my side.Please see the o/p
Code:
 ./a5.sh a2.csv xx
]ecord 1 [ID1|ID2|ID3|ID4|ID5|ID6
Column list:
  1 [ID1]
  2 [ID2]
  3 [ID3]
  4 [ID4]
  5 [ID5]
] 6 [ID6
]ecord 2 [7666303|7666|73037341|XXX|XXXX-YYYY/Z|
END Column list:  1 [ID1] len=7
  2 [ID2] len=4
  3 [ID3] len=8
  4 [ID4] len=3
  5 [ID5] len=11
] len=16
create table xx(
  ID1 number(7),
  ID2 number(4),
  ID3 number(8),
  ID4 varchar2(50),
  ID5 varchar2(50),
 varchar2(50)
);

Regards,
MR
# 26  
Old 06-22-2010
There is a carriage return at the end of your input records.
Removes them or modify your script like that :
Code:
BEGIN {
   colDefaultLength = 1;
}
{ sub(/\r$/, "") }

Jean-Pierre.
# 27  
Old 06-22-2010
Hi Aigless,

Its working fine .Thanks for your great help.

Regards,
MR
# 28  
Old 07-08-2010
Hi
If the date format comming as yyyymmdd instead of / or - ,its treating as Number data type.Is there any way to validate the date format before setting the data type.

Code:
ID|ID2|ID3|ID4|ID5|ID6
7666303|7666|73037341|2005/12/06/|20050607|200000000

Thanks in advance,
MR
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Create table within awk-if statement

Hi I am trying to create a table within an awk if statement awk -F, '{ if ($8 ~ /Match/) BEGIN{print "<table>"} {print "<tr>";for(i=1;i<=NF;i++)print "<td>" $i"</td>";print "</tr>"} END{print "</table>"}' SN1.csv | mailx -s "Your details" abc@123.com But this doesnt work.. Please suggest (8 Replies)
Discussion started by: sidnow
8 Replies

2. Shell Programming and Scripting

Create table using tbl command

Hi, I required the output like attached: I tried using the below command and i'm getting error: file with data: .TS box; cB s s c|c|c PO Download statistics - Host to SOM Time;Receive Time;Processing Time;PO count 4.30 AM OMHPO File;Tue Feb 21 04:39:55 EST 2012;Tue Feb... (3 Replies)
Discussion started by: cns1710
3 Replies

3. Shell Programming and Scripting

Create Script from table

I have a table ABC with 4 columns and below data Col1,Col2,Col3,Col4 prod,10,12,joba prod,10,11,jobb qa,10,12,jobc I want to create an output file like this Server:prod StartTime:10 EndTime:12 JobName:joba Server:prod StartTime:10 EndTime:11 JobName:jobb (3 Replies)
Discussion started by: traininfa
3 Replies

4. Shell Programming and Scripting

Create Pivot table

I would like to use awk to parse a file with three columns in, like: Chennai,01,1 Chennai,07,1 Chennai,08,3 Chennai,09,6 Chennai,10,12 Chennai,11,19 Chennai,12,10 Chennai,13,12 Kerala,09,2 AP,10,1 AP,11,1 Delhi,13,1 Kerala,13,3 Chennai,00,3 Chennai,01,1 Chennai,02,1 Chennai,07,5 (3 Replies)
Discussion started by: boston_nilesh
3 Replies

5. UNIX and Linux Applications

create table via stored procedure (passing the table name to it)

hi there, I am trying to create a stored procedure that i can pass the table name to and it will create a table with that name. but for some reason it creates with what i have defined as the variable name . In the case of the example below it creates a table called 'tname' for example ... (6 Replies)
Discussion started by: rethink
6 Replies

6. UNIX for Dummies Questions & Answers

Create a table - very new to unix

I need to create a simple table of information by grepping several columns from various files and display them all at once with simple headers on top. Can anyone help get me started? I am very new to unix so I really have no idea how to work with this and I appreciate any help I can get! Let me... (11 Replies)
Discussion started by: aj250
11 Replies

7. Shell Programming and Scripting

to create an output file as a table

Hi, I have four input files and would like to create an output file as a table. Please check the example below. File 1. 111111 222222 333333 444444 File 2. 555555 666666 777777 888888 File 3. aaaaa bbbbb ccccc ddddd (2 Replies)
Discussion started by: marcelus
2 Replies

8. Shell Programming and Scripting

[ORACLE] CREATE TABLE in bash

Hey, I want to create a table in bash, my db server is oracle. You can find my script below: I am very confused. I tried to run this script many times without any luck. Please help! (6 Replies)
Discussion started by: radek
6 Replies

9. BSD

How to create IP table at Free BSD

Now, I had installed free bsd at my office. Unfortunitely, Email server have been using Local PoP3 and SMTP to our ISP with outlook. but my unix firewall sever ( free bsd ) didn't allow these port ( 110 & 25 ). How can i create the IP table to pass at server. If u have any experience about obvious... (4 Replies)
Discussion started by: Ashraff Ali
4 Replies

10. Shell Programming and Scripting

create new table/field

Dear Folks, If I have 2 files, say A and B in format: A: $1 $2 01032 12856 01041 13351 01042 11071 01042 12854 01042 12862 01042 12866 . . . and B: (2 Replies)
Discussion started by: Gr4wk
2 Replies
Login or Register to Ask a Question