Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 05 Oct 2015 18:57:54 -0400
From:      Quartz <quartz@sneakertech.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: awk question
Message-ID:  <56130072.9070406@sneakertech.com>
In-Reply-To: <20151005235812.eee38247.freebsd@edvax.de>
References:  <5611C922.4050007@hiwaay.net> <20151005042129.1f153ec6.freebsd@edvax.de> <5611F776.9090701@hiwaay.net> <56124479.9020505@sneakertech.com> <20151005165902.ad01c288.freebsd@edvax.de> <5612EF57.10207@sneakertech.com> <20151005235812.eee38247.freebsd@edvax.de>

next in thread | previous in thread | raw e-mail | index | archive | help
>> It's not very much like sh or C syntax (or
>> any other syntax) and new users tend to get really confused.
>
> Hmmm... I don't know, could you provide an example where you
> would say, like, "this is not intuitive" or even "this does
> something totally strange"?

Things I've noticed new users bump into all the time:


Statements must be wrapped in curly braces, ie;
 > awk '{print $1}{print $2}'
I think awk is one of the few languages to do this.


Because of the above, having to type:
 > awk '{print $1}'
instead of just"
 > awk 'print $1'
.. in other words both the quotes and the curly braces are required. For 
most other shell utilities one is enough.


People assume that awk prints string literals like (ba)sh:
 > echo "$1$2$3"
and
 > awk '{print $1$2$3}'
both yield fields with nothing between them. So far so good, right? but:
 > echo "$1,$2,$3"
yields results with commas between them, but:
 > awk '{print $1,$2,$3}'
yields results with spaces. OK, so it's not like sh. Maybe it's like 
Javascript then?
 >  awk '{print $1+","+$2+","+$3}'
... nope, now all they get is a huge list of mostly zeros, because awk 
doesn't overload operators.

(Note: I am not advocating for overloaded operators and I think 
Javascript is a horrible language).



> Yes, this is true, but keep in mind what awk is: a "pattern-directed
> scanning and processing language". If you want higher precision
> math, use system("<math stuff>  | dc") and incorporate the result;
> awk isn't really for math, but integer math is usually fine. :-)

Right, but it's just something that makes people shy away from awk, for 
better or worse.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56130072.9070406>