On Dec 6, 2012, at 1:59 PM, m.roth@5-cent.us wrote:
Please stop top posting, Craig.
Craig White wrote:
On Dec 6, 2012, at 1:34 PM, m.roth@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
---- not that I was looking for someone to write it for me but that works only when the nginx.conf looks like
server_name domain1.com domain2.com big.server.com;
which I actually didn't need to use awk to parse as I already handled those instances just fine with grep/sed
but I have some conf files which look like
server_name { domain1.com domain2.com big.server.com } ;
and that forced me into looking at alternative methods - hence awk
but your program gives me the following output…
$ awk -f nginx.awk /opt/nginx/sites/ids.conf
$
Craig