by juanpo@[EMAIL PROTECTED]
Feb 11, 2008 at 12:14 PM
On Feb 11, 2:08=A0pm, 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
th=
e rest
> to stdout:
>
> awk '/^FL1/{key=3D$0;print > "list";next}{print key $0}' file
>
> =A0 =A0 =A0 =A0 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.