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,看访问次数判断是否是爬虫

原文地址:https://www.cnblogs.com/tzq9308/p/5078417.html