On 2/11/2008 2:14 PM, juanpo@[EMAIL PROTECTED]
wrote:
> On Feb 11, 2:08 pm, Ed Morton <mor...@[EMAIL PROTECTED]
> wrote:
>
>>On 2/11/2008 12:59 PM, jua...@[EMAIL PROTECTED]
wrote:
>>
>>
>>
>>
>>
>>
>>>Hi, I'm trying to parse a file that looks like this to create 2
>>>different files based on the first 3 characters
>>
>>>FL1ABC
>>>LG1XYZ
>>>LG2DBA
>>>LG3PYZ
>>>FL1CBA
>>>LG1QWE
>>>LG2ZXC
>>
>>>The first file will have all records starting with FL1 like this:
>>>FL1ABC
>>>FL1CBA
>>
>>>The second file will need to have the FL1 records appended to each of
>>>the LG records below it like this:
>>
>>>FL1ABCLG1XYZ
>>>FL1ABCLG2DBA
>>>FL1ABCLG3PYZ
>>>FL1CBALG1QWE
>>>FL1CBALG2ZXC
>>
>>>Is there a way to easily build this logic using awk?
>>
>>>Thanks in advance for any helps you could provide.
>>
>>>Juan.
>>
>>This will create a file called "list" of all the FL1* records and print
the rest
>>to stdout:
>>
>>awk '/^FL1/{key=$0;print > "list";next}{print key $0}' file
>>
>> Ed.- Hide quoted text -
>>
>>- Show quoted text -
>
>
> Thanks Ed,
>
> That code works very well. I discovered a problem in the original
> file I was working from though. Some records in the file don't start
> with LG so I need to include a condition to only write LG records to
> stdout. The file really looks like this:
>
> FL1ABC
> LEX123
> LG1XYZ
> LG2DBA
> LG3PYZ
> FL1CBA
> LEX999
> LG1QWE
> LG2ZXC
>
> Using the example above I would only want to write FL1 records along
> with LG records, ignoring LEX records.
>
> FL1ABCLG1XYZ
> FL1ABCLG2DBA
> FL1ABCLG3PYZ
> FL1CBALG1QWE
> FL1CBALG2ZXC
>
> I tried a couple of things in the code but I just can't get a handle
> on the proper syntax to accomplish it.
>
> Thanks again.
awk '/^FL1/{key=$0;print > "list";next} /^LG/{print key $0}' file
Ed.


|