[CentOS] awk awk

Thu Dec 6 20:59:12 UTC 2012
m.roth at 5-cent.us <m.roth at 5-cent.us>

Please stop top posting, Craig.

Craig White wrote:
>
> On Dec 6, 2012, at 1:34 PM, m.roth at 5-cent.us wrote:
>
>> You rang?
>>
>> Craig White wrote:
>>> a little out of my comfort zone and have practically gotten what I want
>>> but awk seems determined to send a message via std error which is
>>> problematic and annoying. Basically trying to get a list of virtual
>>> host
>>> names from nginx config files like this:
>>>
>>> $ awk -F" " '/./ { if ( match ( "^server_name$", $2 ) ) print $1 }'
>>> /opt/nginx/sites/*.conf \
>>> | grep -v server_name | grep -v ';' | grep -v '}'
>>
>> Why are you doing all that piping and grepping? And the -F" " confuses
>> me...oh, I see. First, whitespace is the default field separator in awk.
>> Then, are you asking if there's a line with a "." in it, or just any
>> non-whitespace? If the latter... mmm, I see, you *really* don't
>> understand
>> awk.
>>
>> awk -f '{if ( $1 ~ /server_name/ ) {\
>>            server = $2;\
>>            gsub(/;|}/,"",server);\
>>            print server;
>>         }
>>        }'
>> <snip>
>>       mark
>>
> Definitely have little to no understanding of awk but…
>
> /./ suppresses empty lines (records in awk speak)

Oh. Never used it. Wrote a *lot* of *long* awk scripts over the years. But
it doesn't matter - looking for $1 to be == server_name will only pick
those lines.
>
> the gsub looks interesting but your code just tosses syntax errors

I see I didn't out \ on the lines, which I wrote that way only to make it
more readable.
>
> and yes Les, the >2 /dev/null definitely redirected the awk squawk to
> where it belonged
>
Ok, I just d/l an nginx.conf file from <http://wiki.nginx.org/FullExample>
and ran the following script on it:
{
   if ( $1 ~ /server_name$/ ) {
      server = $2;
      gsub(/;|}/,"",server);
      print server;
   }
}

and my o/p was
$ awk -f nginx.awk nginx.conf
domain1.com
domain2.com
big.server.com

     mark