Create a Pipe Delimited Extract File [message #98551] |
Wed, 29 December 2004 09:08 ![Go to next message Go to next message](/forum/theme/orafaq/images/down.png) |
Anindya Banerjee
Messages: 5 Registered: December 2004
|
Junior Member |
|
|
Hi,
I need to call a SQL script that goes against couple of Oracle tables and create an extract file. By default this file is created as a fixed-width file.
Is there a way I can create this file in pipe-delimited format?
Thanks in Advance,
- Anindya
|
|
|
|
|
|
Re: Create a Pipe Delimited Extract File [message #98564 is a reply to message #98557] |
Tue, 04 January 2005 17:15 ![Go to previous message Go to previous message](/forum/theme/orafaq/images/up.png) ![Go to next message Go to next message](/forum/theme/orafaq/images/down.png) |
velu
Messages: 10 Registered: February 2002
|
Junior Member |
|
|
yes u can use awk if the output spooled into a file.
awk '{print $1"|"$2"|"$3}' filename > outfilename
if the file is delimited (, comma) then
awk -F, '{print $1"|"$2"|"$3}' filename > outfilename
|
|
|
Re: Create a Pipe Delimited Extract File [message #98568 is a reply to message #98563] |
Wed, 05 January 2005 11:53 ![Go to previous message Go to previous message](/forum/theme/orafaq/images/up.png) |
Anindya Banerjee
Messages: 5 Registered: December 2004
|
Junior Member |
|
|
"....awk '{print $1"|"$2"|"$3}' filename...."
This does not work if you have spaces in the extracted fields. Suppose the field is name and constituted by 'firstname lastname'. This command of awk will assume them to be separate fields.
In such scenario this piece of code works (got this snippet from another website):
awk 'BEGIN{j=split("[[provide the starting columns for the fields e.g. 1 11 39]]",s)}
{for(i=1;i<j;++i){
a=substr($0,s[[i]],s[[i+1]]-s[[i]]);sub(/ *$/,"",a)
printf "%s"(i<j-1 ? "|" : "n"),a
}}' filename;
|
|
|