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


|