awk 模式匹配输出而不是输入

发布于 2024-11-25 16:25:36 字数 274 浏览 0 评论 0原文

我正在使用 awk 从 Apache 日志中输出相关的实时数据,如下所示:

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

效果很好,但它也输出所有图像、CSS 等。所以我想将输出限制为仅 HTML 页面。如果我使用 awk '/.html/ {print $9, $1, $4, $7}'; 它仍然匹配日志文件中的几乎所有行,因为引用者包含“.html”。但我的输出没有引用者,所以有没有办法让 awk 仅在我的输出中匹配,而不是在输入中匹配?

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, $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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽手叙旧 2024-12-02 16:25:36

假设字段 7 包含您感兴趣的 URL,请使用

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

我认为正确的字段编号取决于您的日志文件的格式。我可能是错的。

这告诉 awk 仅当第七个字段与后跟“html”的文字点匹配时才打印字段列表。

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".

烂柯人 2024-12-02 16:25:36
... | awk '
{ 
  output = $9 OFS $1 OFS $4 OFS $7
  if (output ~ /.html/) print output
}'
... | awk '
{ 
  output = $9 OFS $1 OFS $4 OFS $7
  if (output ~ /.html/) print output
}'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文