我一直在尝试对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
它完成了工作,打印了年/月和点击数,但是我需要上面的示例作为输出。换句话说,我想将“点击计数”放在时间范围和实际点击计数的数值之间。知道我该怎么做吗?
先谢谢您。
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
行,
然后打印month
,year
,"hits count -"
和已计数的数字。
太好了。谢谢。它像一种魅力。因为该命令显示了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'来过滤掉我拥有的文件的第一个空行。