看到以前的一道shell面试题,心血来潮,看看自己现在能做了吗?!小试一下……
在access.log中截取 16/Aug/2010:14:31:30到17/Aug/2010:10:12:07间的日志信息,并输出到log.txt中,我的思路,用sed打印16/Aug/2010:14:31:30和17/Aug/2010:10:12:07间的日志并>
#!/bin/bash
n1=`grep -n ?\/Aug\/2010:14:31:30' access.log|head -1|cut -d ':' -f1`
n2=`grep -n ?\/Aug\/2010:10:12:07' access.log|tail -1|cut -d ':' -f 1`
sed -n "${n1},${n2}p" access.log >log.txt
另外sed还有更简单的方法
sed -n '/16\/Aug\/2010:14:31:30/,/17\/Aug\/2010:10:12:07/'p >log.txt
但是此命令思路是对的,可是当access.log 在同一时间内有大量并发访问日志时,这个就不准确了。最完善的还要算第一种思路。
总结)统计Apache或Nginx访问日志里的独立IP访问数量的Shell
1、把IP数量直接输出显示:
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l
2、把IP数量输出到文本显示:
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l > ip.txt
总结:如果单个访问日志大小超过2G,用这个命令查看时很占系统资源,系统负载会上升;所以在服务器高负载时不要查看,最好在低负载时间段查看。上面截图是公司其中一台广告服务器的一天ip访问量,这个访问量其实还包括了搜索引擎的。访问日志只能做个参考,要准确还是要程序来统计。
转载于:https://blog.51cto.com/brucefls/953006