Create table


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Create table
# 29  
Old 07-08-2010
Try this new version:
Code:
file=$1
table=$2
awk -F'|' '

BEGIN {
   colDefaultLength = 1;

   dat1Re = "[0-9]+\/[0-9]+\/[0-9]+";
   dat2Re = "[12][0-9][0-9][0-9][01][0-9][0-3][0-9]";

   datRe  = "^\(" dat1Re "|" dat2Re "\)$";
   nulRe  = "^[[:space:]]*$";
   numRe  = "^[0-9]+$"; 
   decRe  = "^\([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+\)$";

}

{ sub(/\r$/, "") }

NR==1 {
   for ( c=1; c<=NF; c++ ) {
      colName[c] = $c;
   }
   colCount = NF;
   if (!colName[colCount]) colCount--;
   next;
}

{
   for ( c=1; c<=NF; c++ ) {
      if (length($c) > colLength[c]) colLength[c] = length($c);
           if ( $c ~ nulRe    )   continue;
           if ( $c ~ datRe    )   colIsDat[c]++ 
      else if ( $c ~ numRe    )   colIsNum[c]++
      else if ( $c ~ decRe    )   colIsDec[c]++
      else                        colIsTxt[c]++;
   }
}

END {
   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 ( colIsDec[c] ) out = out " number(38,4)"
      else if ( colIsNum[c] ) out = out " number(" colLength[c] ")"
      else if ( colIsDat[c] ) out = out " date"
      else                    out = out " varchar2(" var2Len ")";
      if ( c != colCount ) out = out ",";

      print out

   }
   print ");";
}

' TableName=$table $file

Input file:
Code:
COL1_NUM|COL2_NUM|COL3_TXT|COL4_TXT|COL5_TXT|COL6_DAT|COL7_DEC|
20100708|766|XXX|XXXX-YYYY/Z||10/05/2010|.4
12345|1234|123|01/01/2001||20050607|12.8

Output:
Code:
create table (
  COL1_NUM number(8),
  COL2_NUM number(4),
  COL3_TXT varchar2(50),
  COL4_TXT varchar2(50),
  COL5_TXT varchar2(50),
  COL6_DAT date,
  COL7_DEC number(38,4)
);

Jean-Pierre.
# 30  
Old 07-08-2010
Thanks for your reply .When executing the script ,getting the error meaage but table generated with proper data type.


Code:
awk: cmd. line:6: warning: escape sequence `\/' treated as plain `/'
awk: cmd. line:9: warning: escape sequence `\(' treated as plain `('
awk: cmd. line:9: warning: escape sequence `\)' treated as plain `)'
create table xx(col number...)

# 31  
Old 07-08-2010
The AIX awk doesn't product any message.
These messages are specific tho gawk (GNU awk) :

Modify the script :
Code:
   dat1Re = "[0-9]+/[0-9]+/[0-9]+";
   dat2Re = "[12][0-9][0-9][0-9][01][0-9][0-3][0-9]";

   datRe  = "^(" dat1Re "|" dat2Re ")$";
   nulRe  = "^[[:space:]]*$";
   numRe  = "^[0-9]+$"; 
   decRe  = "^\([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+\)$";

Jean-Pierre.
# 32  
Old 07-08-2010
Hi Aigles,

Its working fine.Thanks a lot

Regards,
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