The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Google UNIX.COM


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
What the command to find out the record length of a fixed length file? tranq01 UNIX for Dummies Questions & Answers 9 17 Hours Ago 01:04 PM
how to convert Fixed length file to delimited file. satyam_sat Shell Programming and Scripting 7 04-02-2008 11:41 PM
fixed record length george_ Shell Programming and Scripting 16 03-28-2006 02:41 AM
convert XML file into Text file(fixed length) ram2s2001 Shell Programming and Scripting 0 11-02-2005 10:28 PM
creating a fixed length output from a variable length input r1500 Shell Programming and Scripting 2 12-03-2003 10:09 AM

Reply
 
Submit Tools LinkBack Thread Tools Search this Thread Display Modes
  #1  
Old 10-25-2005
Registered User
 

Join Date: Sep 2004
Location: Minnesota
Posts: 13
Convert delimited to fixed length

Hi, I have to change a tab delimited file to a fixed length file. For text fields I need to left justify and NULL fill to the right and for number fields I need to right justify and zero fill to the left. If there are spaces between words in a text field I need to keep them as spaces. I am using korn shell and AIX. Here is a portion of a flat file that I am working with (First field is text and 12 characters long and second is a number 10 characters long) -
Bob Smith<<tab>>139.90
Kathy Reys<<tab>>-40.50

Here is the output that I need -
Bob Smith 0000139.90
Kathy Reys 0000-40.50
Reply With Quote
Forum Sponsor
  #2  
Old 10-25-2005
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,667
What an odd way to handle negative numbers...
Code:
#! /usr/bin/ksh
typeset -L13 name
typeset -R10 val2
IFS="<<tab>>"
exec < datafile
while read name val ; do
         val2="0000000000000000"$val
         echo "$name $val2"
done
exit 0
Reply With Quote
  #3  
Old 10-26-2005
Registered User
 

Join Date: Sep 2004
Location: Minnesota
Posts: 13
Got me further

Thanks for that help, that got me most of the way to where I needed. Do you know how to do the NULL padding after the strings instead of space padding? I thought I figured it out with a -Z on the typeset, but it doesn't seem to be working. Thanks again for the help.
Reply With Quote
  #4  
Old 10-26-2005
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,667
Sheesh, what a crazy format. ksh uses strings which are null terminated and this makes working with nulls virtually impossible. We can pad with a substitute character and then translate all occurences of the sunstitute character to nulls as the last operation.
Code:
#! /usr/bin/ksh
typeset -L13 name2
typeset -R10 val2
PAD="%"
NULLS="${PAD}${PAD}${PAD}${PAD}"
NULLS="${NULLS}${NULLS}${NULLS}${NULLS}"
IFS="<<tab>>"
exec < data
while read name val ; do
        val2="00000000000000"$val
        name2=${name}${NULLS}
        echo "$name2 $val2"
done | tr $PAD "\000"
exit 0
Reply With Quote
  #5  
Old 10-26-2005
Registered User
 

Join Date: Sep 2004
Location: Minnesota
Posts: 13
That's it!!!

Thanks for your help.
Reply With Quote
  #6  
Old 10-26-2005
Registered User
 

Join Date: Jul 2005
Posts: 137
Code:
ruby -F\011 -nale'print $F[0].ljust(12,0.chr),$F[1].rjust(10,"0")' file
Reply With Quote
  #7  
Old 10-26-2005
Registered User
 

Join Date: Sep 2004
Location: Minnesota
Posts: 13
1 More Thing

I thought I had this figured out, but I'm running into another scenario that I need help with. Do you know how I can fix this if I have no data in a field, <<tab>><<tab>>? What is happening is that it's just going to the next field where there is data and using that, but I need it to use the empty field. Not sure if I explained that well, so here's an example -
Input file - (first field left justified NULL padded (10bytes), second field left justified NULL padded (1 byte), and third field left justified NULL padded (10bytes))
Bob Smith<<tab>><<tab>>Susan Smit
Kathy Reys<<tab>>A<<tab>>Ron Davis

Output file currently getting -
Bob Smith<<NULL>>Susan Smit
Kathy ReysARon Davis<<NULL>>

Needed output -
Bob Smith<<NULL>><<NULL>>Susan Smit
Kathy ReysARonDavis<<NULL>>

Hopefully that makes sense, if not I can try to explain more.
Thanks.
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes




All times are GMT -7. The time now is 06:15 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0