Shell --awk
1、awk命令格式:
awk [options] 文件名
options:
-F fs:指定分割数据的分隔符
-f file:指定程序的脚本文件
例:awk -F: '{print $1}' /etc/passwd
awk –f script /etc/passwd
script:代表的是passwd文件的处理语句
像{print $1} 都可用放在script文件中
2、BEGIN、END
awk -F: 'BEGIN{num=0}{print $1;num++}END{print num}' /etc/passwd
BEGIN在读取数据之前执行,END在读完数据之后执行。
将passwd文件以“:”分割开,然后打印每行的第一个元素。
3、内置变量
FS:Field Seperator, 输入时的字段分隔符
# awk 'BEGIN{FS=":"}{print $1,$7}' /etc/passwd
RS:Record Seperator, 输入行分隔符
OFS: Output Field Seperator, 输出时的字段分隔符;
ORS: Outpput Row Seperator, 输出时的行分隔符;
NF:Numbers of Field,字段数
NR:Numbers of Record, 行数;所有文件的一并计数;
FNR:行数;各文件分别计数;
用法:
awk '{print FNR ,$1}' gradt.txt 行号
4、匹配符
例:
awk '/110.52.250.126/ {print $1}' access_2013_05_30.log 所有包含110.52.250.126元素的行
awk ' ($1 ~ /110.52.250.126/) {print $1}' access_2013_05_30.log 所有第一个元素是110.52.250.126元素的行
awk ' ($1 !~ /110.52.250.126/) {print $1}' access_2013_05_30.log 所有第一个元素不是110.52.250.126元素的行
5:网站访问量日志分析
1):首先去掉一些图片、js、css和一些无效的网页请求
awk '($7 !~ /\.jpg|\.png|\.css|\.js|\.gif/ && $9 ~ /200/){print}' access_2013_05_30.log > clean_2013_05_30.log
将筛选出来的数据重定向到clean_2013_05_30.log日志文件中
2):统计clean_2013_05_30.log文件中的总数据量(pv数)
awk 'BEGIN{pv=0} {pv++} END{print pv}' clean_2013_05_30.log
3):统计不同ip访问的次数(uv数)
awk '{print $1}' access_2013_05_30.log|sort -n|uniq -c|wc -l
注意:需要先排序再去重 这样才正确。否则uniq去重只会把挨着相等的去掉。
所以先排序再去重,然后在统计数量
注解:awk '{print $1}' access_2013_05_30.log|sort -n|head –10
可以用head取出访问量比较大的ip,看访问次数判断是否是爬虫