New Eyes on an awk script
Shawn Tayler
stayler
Mon Nov 15 22:15:59 PST 2004
On Mon, 15 Nov 2004 09:23:14 -0500 Brad De Vries <devriesbj at gmail.com>
exclaimed:
> On Mon, 15 Nov 2004 06:01:23 -0800, Shawn Tayler
> <stayler at xmtservices.net> wrote:
> > Thanks Brad,
> >
> > Well this did change something. The syntax error now points to the
> > '&&" in the if statements. According to my not so great SED & AWK
> > book from O'Reilly, this is supposed to be a logical AND.
> >
> > Any suggestions?
> >
> > Shawn
> >
> > On Mon, 15 Nov 2004 08:18:56 -0500 Brad De Vries <devriesbj at gmail.com>
> > exclaimed:
> >
> >
> >
> > > On Sun, 14 Nov 2004 11:15:37 -0800, Shawn Tayler
> > > <stayler at xmtservices.net> wrote:
> > > > Would one of you more knowledgable type show me the stupid mistake
> > > > I am making with the following awk script? I have been banging my
> > > > head against the "syntax error" wall for a while now.
> > > >
> > > > BEGIN { FS = "," }
> > > > ++x
> > > > if ( NF == 9 ) { print
> > > > x","$1","$2","$3","$4","$5","$6","$7","$8","$9",NA" } if ( NF == 10
> > > > )&& ( $9 == $10 ) { print
> > > > x","$1","$2","$3","$4","$5","$6","$7","$8","$9",NA" } if ( NF == 10
> > > > )&& ($9 != $10 ) { print
> > > > x","$1","$2","$3","$4","$5","$6","$7","$8","$9","$10 } if ( NF == 8
> > > > ) { print x","$1","$2","$3","$4","$5","$6","$7","$8", , " }
> > > >
> > > > I keep getting a syntax error on the if statement.
> > > >
> > > > Shawn
> > >
> > > Two things Shawn; first, the block you want to execute must be
> > > enclosed in braces and second, the entire condition for each "if"
> > > must be enclosed in parenthesis. Try:
> > > -------
> > > BEGIN { FS = "," }
> > > {
> > > ++x
> > > if ( NF == 9 ) { print
> > > x","$1","$2","$3","$4","$5","$6","$7","$8","$9",NA" }
> > > if (( NF == 10 ) && ( $9 == $10 )) { print
> > > x","$1","$2","$3","$4","$5","$6","$7","$8","$9",NA" }
> > > if (( NF == 10 ) && ($9 != $10 )) { print
> > > x","$1","$2","$3","$4","$5","$6","$7","$8","$9","$10 }
> > > if ( NF == 8 ) { print
> > > x","$1","$2","$3","$4","$5","$6","$7","$8", , " }
> > > }
> > > -------
> > >
> > > Brad.
>
> Strange, here's what I've got, how does it compare with what you've got:
> -------
> /home/bjd/tmp> cat it.awk
> BEGIN { FS = "," }
> {
> ++x
> if ( NF == 9 ) { print
> x","$1","$2","$3","$4","$5","$6","$7","$8","$9",NA" }
> if (( NF == 10 ) && ( $9 == $10 )) { print
> x","$1","$2","$3","$4","$5","$6","$7","$8","$9",NA" }
> if (( NF == 10 ) && ($9 != $10 )) { print
> x","$1","$2","$3","$4","$5","$6","$7","$8","$9","$10 }
> if ( NF == 8 ) { print
> x","$1","$2","$3","$4","$5","$6","$7","$8", , " }
> }
> /home/bjd/tmp> cat data
> a,b,c,d,e,f,g,h,i
> a,b,c,d,e,f,g,h,i,j
> a,b,c,d,e,f,g,h,i,i
> a,b,c,d,e,f,g,h
> /home/bjd/tmp> awk -f it.awk < data
> 1,a,b,c,d,e,f,g,h,i,NA
> 2,a,b,c,d,e,f,g,h,i,j
> 3,a,b,c,d,e,f,g,h,i,NA
> 4,a,b,c,d,e,f,g,h, ,
> /home/bjd/tmp> rpm -qa | grep -i awk
> gawk-3.1.1-9
This is the result using the above file and data.
shawn at delphi:~/temp$ awk -f ../postgres/test.awk < data
a,b,c,d,e,f,g,h,i
a,b,c,d,e,f,g,h,i,j
a,b,c,d,e,f,g,h,i,i
4,a,b,c,d,e,f,g,h, ,
My version of awk is
shawn at delphi:~/temp$ awk --version GNU Awk 3.1.4
Copyright (C) 1989, 1991-2003 Free Software Foundation.
Shawn
More information about the Linux-users
mailing list