开发者

Awk pattern matching on output not input

I'm using awk to output relevant live data from my Apache logs like so:

tail -f access_log | awk '{print $9, $1, $4, $7}';

Works great but it outputs all the images, CSS, etc too. So I'd like to restrict output to only HTML pages. If I use awk '/.html/ {print $9, $1,开发者_C百科 $4, $7}'; it still matches almost all lines in the logfile because the referrer includes ".html". My output doesn't have the referrer though, so is there a way to get awk to match in my output only, not the input?


Assuming that field 7 contains the URL you're interested in, use

awk '$7 ~ /\.html/ {print <your-field-list>}'

I think the right field number depends on the format of your log file. I could be wrong.

That tells awk to print your field list only if the seventh field matches a literal dot followed by "html".


... | awk '
{ 
  output = $9 OFS $1 OFS $4 OFS $7
  if (output ~ /.html/) print output
}'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜