Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Awk > Re: Trim right ...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 10 of 12 Topic 2176 of 2236
Post > Topic >>

Re: Trim right blanks in each fixed-length field

by Ed Morton <morton@[EMAIL PROTECTED] > Mar 3, 2008 at 11:52 AM

On 3/3/2008 10:25 AM, Radu wrote:
> On Mar 3, 4:37 am, Luuk <L...@[EMAIL PROTECTED]
> wrote:
> 
>>Ed Morton schreef:
>>
>>
>>
>>
>>
>>
>>>On 3/2/2008 1:57 PM, Radu wrote:
>>>
>>>>On Mar 2, 2:24 pm, Luuk <L...@[EMAIL PROTECTED]
> wrote:
>>>
>>>>>Radu schreef:
>>>>
>>>>>>On Mar 2, 12:34 pm, Luuk <L...@[EMAIL PROTECTED]
> wrote:
>>>>>
>>>>>>>Radu schreef:
>>>>>>>
>>>>>>>>Hi everybody,
>>>>>>>>Input file:
>>>>>>>>ID         |First name |Last name |Address                        
   |
>>>>>>>>Phone             |
>>>>>>>>--------------------------------------------------------------------------------------------------------------
>>>>>>>><--10-->|<----15----->|<----20----->|
>>>>>>>><--------30------------------------>|<---14------------->|
>>>>>>>>--------------------------------------------------------------------------------------------------------------
>>>>>>>>4568     |Michael     |Moore       |350 Kensington Rd.           |
>>>>>>>>(514) 567-1234  |
>>>>>>>>63542   |James       |Joyce       |220 London Blv.                
|
>>>>>>>>(450) 234-1456  |
>>>>>>>>I need to trim all blanks of each fixed-length field (notice there
are
>>>>>>>>blanks within each field that may be seen as field separators by
awk
>>>>>>>>if not treated correctly). The output file I'm looking for (a CSV
>>>>>>>>file) would be like:
>>>>>>>>4568,Michael,Moore, 350 Kensington Rd.,(514) 567-1234
>>>>>>>>63542,James,Joyce,220 London Blv.,(450) 234-1456
>>>>>>>>Thanks,
>>>>>>>>Radu
>>>>>>>
>>>>>>>awk '{ gsub(/\|/,","); print ; gsub(" \+"," "); gsub(" ,",",");
print'
>>>>>>>inputfile
>>>>>>>--
>>>>>>>Luuk
>>>>>>
>>>>>>Thanks Luuk,
>>>>>>All seems fine, only I did a "small" mistake.
>>>>>>The fields are not separated by "|" but by blanks.
>>>>>>So the record will be something like
>>>>>>4568     Michael     Moore       350 Kensington Rd.          (514)
>>>>>>567-1234
>>>>>>All I have is the fixed-length of each field. I guess I need to trim
>>>>>>all leading and trailing spaces (but not the inside ones, even if
they
>>>>>>repeat on several positions) and separate the fields with ",".
>>>>>>Thanks again,
>>>>>>Radu
>>>>>
>>>>>awk 'BEGIN { OFS=","; }
>>>>>       { id=substr($0,1,10);
>>>>>       first=substr($0,11,15);
>>>>>       last=substr($0,26,20);
>>>>>       address=substr($0,46,30);
>>>>>       phone=substr($0,76,14);
>>>>>       gsub(" \+"," ",id);
>>>>>       gsub(" \+"," ",first);
>>>>>       gsub(" \+"," ",last);
>>>>>       gsub(" \+"," ",address);
>>>>>       gsub(" \+"," ",phone);
>>>>>       print id, first, last, address, phone;
>>>>
>>>>>}' inputfile
>>>>
>>>>>Fields may still end with 1 space....
>>>>
>>>>>--
>>>>>Luuk
>>>>
>>>>Thanks a lot Luuke,
>>>
>>>>Excellent idea. It worked
>>>
>>>>Radu
>>>
>>>You might want to take a look at GNU awks fixed witdh field handling:
>>
>>>$ echo "4568      Michael        Moore               350 Kensington Rd.
>>>    (514) 567-1234" | gawk -v FIELDWIDTHS="10 15 20 30 14" -v OFS=","
'{ for
>>>(i=1;i<=NF;i++) sub(/ *$/,"",$i) }1'
>>>4568,Michael,Moore,350 Kensington Rd.,(514) 567-1234
>>
>>>Regards,
>>
>>>   Ed.
>>
>>indeed, i might do that, thanks....
>>
>>but i miss the relation FIELDWITH <--> NameOfField which i find more
>>clearer in my example, and i hate to write docs, so if i look at my
>>example in one year from now, i have a quicker understanding of what it
>>supposed to do...,
>>
>>--
>>Luuk
> 
> 
> Hi guys,
> 
> Ed, can you please tell me what is }1 for at the end of your gawk?
> I used Luuk's method, only my real file has 21 fields, and doing it
> manually is a real pain (i.e adding up all the field length) whereas
> your solution is way quicker.

"}" is just the end of the action section that started with "{".
"1" is a true condition which invokes the default action which is to print
the
current record. It's a common awk idiom instead of typing "{ print $0 }".

	Ed.




 12 Posts in Topic:
Trim right blanks in each fixed-length field
Radu <raducocos@[EMAIL  2008-03-02 08:59:55 
Re: Trim right blanks in each fixed-length field
Luuk <Luuk@[EMAIL PROT  2008-03-02 18:26:32 
Re: Trim right blanks in each fixed-length field
Luuk <Luuk@[EMAIL PROT  2008-03-02 18:34:08 
Re: Trim right blanks in each fixed-length field
Radu <raducocos@[EMAIL  2008-03-02 10:38:52 
Re: Trim right blanks in each fixed-length field
Luuk <Luuk@[EMAIL PROT  2008-03-02 20:24:57 
Re: Trim right blanks in each fixed-length field
Radu <raducocos@[EMAIL  2008-03-02 11:57:11 
Re: Trim right blanks in each fixed-length field
Ed Morton <morton@[EMA  2008-03-02 20:37:03 
Re: Trim right blanks in each fixed-length field
Luuk <Luuk@[EMAIL PROT  2008-03-03 10:37:36 
Re: Trim right blanks in each fixed-length field
Radu <raducocos@[EMAIL  2008-03-03 08:25:19 
Re: Trim right blanks in each fixed-length field
Ed Morton <morton@[EMA  2008-03-03 11:52:48 
Re: Trim right blanks in each fixed-length field
Luuk <Luuk@[EMAIL PROT  2008-03-03 19:24:52 
Re: Trim right blanks in each fixed-length field
Ed Morton <morton@[EMA  2008-03-03 13:18:35 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri May 16 10:50:03 CDT 2008.