bash – 从nginx访问日志文件中查找访问/ page1但不访问/ page2的IP地址
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了bash – 从nginx访问日志文件中查找访问/ page1但不访问/ page2的IP地址,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1600字,纯文字阅读大概需要3分钟。
内容图文
![bash – 从nginx访问日志文件中查找访问/ page1但不访问/ page2的IP地址](/upload/InfoBanner/zyjiaocheng/958/b7594f364ae6455b97ccfb5b5e3c7471.jpg)
我需要从日志文件中选择特定数据.
我需要两个脚本:
>我需要选择仅访问/ page1的所有IP地址
>我需要选择访问/ page1但从未访问/ page2的所有IP地址
我在.tar文件中有我想要的日志.我想将它们解压缩到一个文件夹中,然后我将使用该脚本来解析它们并删除它们.所有重复的IP地址.
这是我到目前为止:
# filter /page1 visitors
cat access.log | grep "/page1" > /tmp/res.txt
# take the IP portion of record
cat res.txt | grep '^[[:alnum:]]*\.[[:alnum:]]*\.[[:alnum:]]*\.[[:alnum:]]*' -o > result.txt
典型的访问日志看起来像
162.158.86.83 - - [22/May/2016:06:31:18 -0400] "GET /page1?vtid=nb3 HTTP/1.1" 301 128 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"
解决方法:
awk '/^\/page1?/ {print $1}' /path/to/access.log | sort -u > result.txt
如果要计算每个唯一IP的计数,请将sort -u更改为sort | uniq -c
如果要仅匹配/ page1的日志的请求路径字段(而不是整行):
awk '$7 ~ /^\/page1?/ {print $1}' /path/to/access.log | sort -u > result.txt
注意:我认为nginx访问日志与apache访问日志相同.如果没有,请计算nginx日志中的字段(计算每个空格,包括Date:Time和TimeZone之间的字段),并使用正确的字段编号而不是$7
最后,如果要打印IP地址(或主机名,如果它们已经被解析)和请求路径:
awk -v OFS='\t' '$7 ~ /^\/page1?/ {print $1, $7}' /path/to/access.log |
sort -u > result.txt
要查看已访问/ page1但从未访问/ page2的IP地址:
awk '$7 ~ /^\/page1?/ {print $1}' /path/to/access.log | sort -u > result1.txt
awk '$7 ~ /^\/page2?/ {print $1}' /path/to/access.log | sort -u > result2.txt
comm -2 -3 result1.txt result2.txt
comm’s -2选项禁止仅出现在result2.txt中的行,而-3抑制出现在两个文件中的行.因此输出只出现在results1.txt中.
请参阅man comm了解更多详情.
内容总结
以上是互联网集市为您收集整理的bash – 从nginx访问日志文件中查找访问/ page1但不访问/ page2的IP地址全部内容,希望文章能够帮你解决bash – 从nginx访问日志文件中查找访问/ page1但不访问/ page2的IP地址所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。