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.


|