我需要帮助分析 nginx 日志。日志样本:
10.10.10.10 - - [21/Mar/2016:00:00:00 +0000] "GET /example?page=&per_page=100&scopes= HTTP/1.1" 200 769 "-" "" "1.1.1.1"
10.10.10.10 - - [21/Mar/2016:00:00:00 +0000] "GET /example?page=&per_page=500&scopes= HTTP/1.1" 200 769 "-" "" "1.1.1.1"
11.11.11.11 - - [21/Mar/2016:00:00:00 +0000] "GET /example?page=&per_page=10&scopes= HTTP/1.1" 200 769 "-" "" "1.1.1.1"
12.12.12.12 - - [21/Mar/2016:00:00:00 +0000] "GET /example?page=&per_page=500&scopes= HTTP/1.1" 200 769 "-" "" "1.1.1.1"
13.13.13.13 - - [21/Mar/2016:00:00:00 +0000] "GET /example HTTP/1.1" 200 769 "-" "" "1.1.1.1"
是否可以通过 count 选择所有包含 per_page 参数且此参数等于或大于 100 的 uniq ip 地址?
因此,输出可以是任何格式:
10.10.10.10 - 2 # ip 10.10.10.10 was found twice
12.12.12.12 - 1
是否可以通过一个命令获取?
最佳答案
$ awk '/per_page=[0-9]{3}/{cnt[$1]++} END{for (ip in cnt) print ip, cnt[ip]}' file
12.12.12.12 1
10.10.10.10 2
这绝对是基本的 awk - 如果您打算在 UNIX 中处理任何其他文本文件,请阅读 Arnold Robbins 的 Effective Awk Programming, 4th Edition 一书。
关于linux - 按条件选择行并用一行命令计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36134001/