首页 > 解决方案 > 一行中的多个 awks

问题描述

我从访问日志中获取输出以查看命中计数、IP 地址和用户代理。输出不起作用,因为它没有捕获用户代理字符串中我需要的所有内容。

示例输出:

Getting access logs from /var/log/apache2/my.access.log ...

Sorting unique IPs...

COUNT   IP Address | User Agent String

15165 xx.xxx.xxx.xx | "Mozilla/5.0 <--- Need everything between quotes
10704 xx.xxx.xxx.xx | "Mozilla/5.0      not just this portion
 9915 xx.xxx.xxx.xx | "Mozilla/5.0
 8240 xx.xxx.xxx.xx | "Mozilla/5.0
 7770 xx.xxx.xxx.xx | "Mozilla/5.0
 7266 xx.xxx.xxx.xx | "Mozilla/5.0

获取此信息的行是:

cat /var/log/apache2/my.access.log | awk '{print $11 " | " $24 " " $25 " " $26}' | sort -n | uniq -c | sort -nr | head -30

我知道 $24 " " $25 " " $26 的部分实际上可以用

awk -F\" '{ print $6 }'

我的问题是,如果可能的话,如何将它们都添加到一行中?

日志文件的示例原始输出(更改了一些文本):

[2018-10-10 10:11:22 (Wed)] | <servername> | R:<servername> | www.<thewebsite>.com | xxx.xxx.xx.xxx |"GET /script/that/was/accessed HTTP/1.1" | 200 | 1430 | 8104 | "https://www.<thewebsite>.com" | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko"

我需要以“Mozilla/5.0”开头的最后一部分,一直到另一个引号,但与另一个 awk 在同一行。

标签: bashawk

解决方案


推荐阅读