awk使用学习

一、 awk的命令格式:

awk命令是由模式和操作组成的(两者是可选的):

pattern {action} 如awk $1~/(\.jpg|\.gif)$/' access.log,或awk 'length($1) < 10' click.log。

如果没有模式,则action应用到全部记录,如果没有action,则输出匹配模式的全部记录。

默认情况下,每一个输入行都是一条记录,但我们可以通过RS变量指定不同的行分隔符进行一行的定义。

1.1 模式,可以是正则表达式,也可以是关系表达式,在表达式前面用~和~!分别表示匹配和不匹配后面的模式

BEGIN:指定在第一条记录被处理之前所进行的工作
END:指定在最后一条记录被处理之后所进行的工作

1.2 操作,由一个或多个命令、函数、表达式组成,操作需要用大括号{}包含,这里面就是对文本要进行处理的逻辑

二、awk的环境变量(常用):

$0 完整的一行记录
$n 当前记录的第n个字段
ARGV 命令行参数数组
FS 字段分隔符,默认是空格或tab,可以自己指定
NR 当前记录数
NF 当前记录的字段数
RS 一行记录的分隔符,默认是换行符

三、文本处理常用命令:

1、使用awk分析日志,列举不重复的ip个数。

cat log | awk -F ' ' '{print $2}' | sort -u |wc -l

2、使用awk分析日志,列举不重复的ip,导出到文件。

cat log | awk -F ' ' '{print $2}' | sort -u >/usr/iplist.txt

3、使用awk分析日志,列举不重复的ip,并数出每个ip访问的次数,根据访问次数做倒序,导出至文本文件。

cat log | awk -F ' ' '{a[$2]++}END{for (i in a) print i" " a[i]}' | sort -k2nr -g >dest.txt

四、参考

1、http://man.lupaworld.com/content/manage/ringkee/awk.htm
2、http://www.blogjava.net/henry14/archive/2012/01/15/368560.html
3、http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html

添加新评论