Apache access.log排序ip点击并自定义输出结果

问题描述 投票:0回答:2

我一直在尝试对apache.log文件中的结果进行排序和自定义打印。这种情况是我希望看到的结果是:

输出应表示每月总点击数,按月排序

输出应类似于:

Nov 2017 hits count - 12512

Dec 2017 hits count - 10087

Jan 2018 hits count - 12561

这里是access.log的一部分,以供参考:

91.244.19.43 - - [12/Dec/2015:19:02:36 +0100] "GET / HTTP/1.1" 404 239 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
91.244.19.43 - - [12/Dec/2015:19:02:36 +0100] "GET /images/ HTTP/1.1" 200 1963 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
91.244.19.46 - - [12/Dec/2015:19:02:36 +0100] "GET /template/ HTTP/1.1" 200 10004 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
91.244.19.43 - - [12/Dec/2015:19:02:36 +0100] "GET /wp-login.php HTTP/1.1" 200 1801 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
193.47.55.21 - - [12/Dec/2015:19:02:36 +0100] "GET /wp-admin/ HTTP/1.1" 200 1457 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
193.47.55.21 - - [12/Dec/2015:19:02:36 +0100] "GET /template/ HTTP/1.1" 200 3465 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
11.114.21.37 - - [12/Dec/2015:19:02:36 +0100] "GET /wp-login.php HTTP/1.1" 200 4890 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"

我想出了类似这样的东西:

cat access.log |sort -k1n|awk '{print $4}'|cut -d: -f1|cut -d/ -f2-3|sed 's/\[//g'|tr '/' ' '|sort -k2n -k1M

它完成了工作,打印了年/月和点击数,但是我需要上面的示例作为输出。换句话说,我想将“点击计数”放在时间范围和实际点击计数的数值之间。知道我该怎么做吗?

先谢谢您。

apache sorting awk uniq
2个回答
0
投票
cat access.log | awk '{ print substr($4,5,3),substr($4,9,4) }' | \
 sort -k1  | \
 uniq -c | \
 gawk '{ print $2,$3,"hits count - ",$1}'

第一打印年月,

然后排序(不是真的需要),

然后计数uniq行,

然后打印monthyear"hits count -"和已计数的数字。


0
投票

太好了。谢谢。它像一种魅力。因为该命令显示了IP总数,是否可以按uniq IP过滤计数?使用sort -u或uniq -u不能与以下命令组合使用:

cat access.log | sed'/ ^ $ / d'| awk'{print substr($ 4,5,3),substr($ 4,9,4)}'| |排序-k2n | uniq -c | gawk'{print $ 2,$ 3,“ hits count-”,$ 1}'

注意:我使用sed'/ ˆ $ / d'来过滤掉我拥有的文件的第一个空行。

© www.soinside.com 2019 - 2024. All rights reserved.