awk 分析格式化的日志

原创
2017/06/20 00:20
阅读数 279

一、awk命令选项

二、awk介绍

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。
现在一般所说的awk就是gawk。

三、awk特点

awk程序的报告生成能力通常用来从大文本文件中提取数据元素并将它们格式化成可读的报告。最完美的例子是格式化日志文件。awk程序允许从日志文件中只过滤出你想要看的数据。

四、awk常用命令举例

4.1、awk命令格式

awk [options] program file

options :选项

program :程序

file:文件(待处理的数据文件)

4.2、参数介绍

-F fs

指定行中分隔数据字段的字段分隔符

-f file

指定程序脚本文件

4.3、awk处理文本数据

awk的基本特性之一就是它处理文本文件中数据的能力。它会自动给每行中的每个数据元素分配一个变量。

$0代表整个文本行 (指当前awk读取这一行,awk每一次读取文本中的一行进行处理)

$1代表文本行中的第1个数据字段

$2代表文本行中的第2个数据字段

$n代表文本行中的第n个数据字段

注意:每个数据字段在文本行中都是通过字段分隔符来划分的。awk中的默认字段分隔符是任意的空白字符(例如空格或制表符) 如果想要读取使用其他字段分隔符的文件,可以使用-F 选项指定

4.4、awk脚本

如果某编程语言一次只能执行一条命令,那么它不会有太大用处。awk编程语言允许你将多条命令组成一个正常的程序。在这我们可以把这些命令保存到一个文件中,这个文件我们就称为是awk的脚本文件。 格式:只要将每条命令放到一个新的行就好了,不需要用分号。

awk -F: -f script /etc/passwd

4.5、awk的BEGIN、END

awk在开始执行的时候会执行一次BEGIN,awk在执行完分析逻辑部分后,在结束之前会执行一次END.

4.6、awk内置变量

FS:Field Seperator, 输入时的字段分隔符

# awk 'BEGIN{FS=":"}{print $1,$7}' /etc/passwd

输出以tab符分割如下:

RS:Record Seperator, 输入行分隔符

OFS: Output Field Seperator, 输出时的字段分隔符;

ORS: Outpput Row Seperator, 输出时的行分隔符;

NF:Numbers of Field,字段数量

NR:Numbers of Record, 行号;所有文件的一并计数;

FNR:行号;各文件分别计数;

4.7、awk中匹配操作符及比较符

正则表达式需要放在/expr/中,/expr/必须出现在它要控制的程序脚本的左花括号前。

如:wk '/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 

4.8、linux命令扩展

4.8.1、shell中的管道| command 1 | command 2:他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2

4.8.2、

wc -l 统计行数

uniq -c 在输出行前面加上每行在输入文件中出现的次数

uniq -u 仅显示不重复的行

sort -nr

-n:依照数值的大小排序

-r:以相反的顺序来排序

-k:按照哪一列进行排序

head -10 取前十名

 

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部