首先需要介绍一下基于linux的文本分析的一些命令工具;
awk:
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,
awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
awk工作流程:
读入有"\n"换行符分割的一条记录,然后把记录按照指定的域分隔符划分域,填充域
$0表示所有的域,$1表示第一个域,以此类推
默认域分隔符是空白键或者tab键
sort:
将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
uniq:
用于去除有序文件中的重复行并将结果输出到标准输出。uniq经常和sort合用,为了使uniq起作用,所有的重复行必须是相邻的
wc:
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
Nginx 日志分析,我直接用的我机器上的nginx日志,默认的都是可以的,列举几个简单常用的, 如果不清楚你的nginx日志地址,查看nginx.conf文件即可,看下我这边的日志截图:
awk '{print $1}' access.log # IP 地址 ($remote_addr) 如下图所示,其他不再截图示意,大家自行操作
awk '{print $4,$5}' access.log # 日期和时间 ([$time_local]) awk '{print $7}' access _log # URI ($request) awk '{print $9}' access _log # 状态码 ($status) awk '{print $10}' access _log # 响应大小 ($body_bytes_sent) awk '{print $12}' access _log # 代理 存在日志格式有出入,命令需求调整,但思路是一致的
1.列举一些组和命令,根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print $7}' access.log|wc -l 3.查询访问最频繁的URL awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more 4.查询访问最频繁的IP awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more 5.访问最多的10个ip及访问次数 awk '{print $1}' 日志地址 | sort | uniq -c | sort -n -k 1 -r | head -n 10