如何获取在access.log中找到的IP地址的出现次数的总和



我正在尝试获取在nginxaccess.log中找到的IP地址的特定出现次数。access.log格式如下

xxx.xxx.xxx.xxx - - [21/Dec/2021:12:59:30 +0100] "GET /<some/path/on/webserver>" 200 1028 "<referrer>" "Mozilla/5.0 (Linux; Android 11; SM-A202F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36" "-"

我目前使用的awk是

awk '$7 ~ /^/rest/default/V1/products-render-info?/ {print $1, $5}' /var/log/nginx/access.log.1 | sort -u > test.txt

保存在文本文件中的结果是,只有唯一的IP地址,

127.0.0.1 
/rest/default/V1/products-render-info?searchCriteria.... <snip>

然而,我想知道IP地址的出现次数,以及之类的东西

127.0.0.1
<number of times this IP address has been found in the access.log>
/rest/default/V1/products-render-info?searchCriteria.... <snip>

非常感谢您的帮助!

感谢

grep "^[0-9]+.[0-9]+.[0-9]+.[0-9]+" test.txt | awk -F" " '{print $1}' | sort | uniq -c

对不起

好吧,让我们从正则表达式开始:

^       : beginning of line
[0-9]+ : a list of digits (at least one)
.      : a dot

所以,你的行应该以行的开头(很明显(,然后是至少一个数字、一个点的列表。。。这四次(但最后没有点(。

像这样,你已经找到了你的IP地址。

然后使用一个空格作为字段分隔符(awk -F" "(对其进行解析,并显示第一列'{print $1}'

现在您已经显示了一个IP地址列表,您需要对其进行计数。

因此,首先对它们进行排序(sort(,完成后,计算唯一的结果(uniq -c(。

很简单,不是吗?:-(

最新更新