Linux命令 awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

特殊变量:

$number 表示记录的字段。比如,$1表示第1个字段,$2表示第2个字段,如此类推。而$0比较特殊,表示整个当前行

FS 表示字段分隔符

NF 表示当前记录中的字段数量

NR 表示当前记录的编号(awk将第一个记录算作记录号1)

 

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:运行BEGIN{ commands }语句块中的语句。 BEGIN语句块在awk開始从输入流中读取行之前被运行,这是一个可选的语句块,比方变量初始化、打印输出表格的表头等语句通常能够写在BEGIN语句块中。

第二步:从文件或标准输入(stdin)读取一行。然后运行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行反复这个过程。直到文件所有被读取完成。pattern语句块中的通用命令是最重要的部分,它也是可选的。假设没有提供pattern语句块,则默认运行{ print },即打印每个读取到的行。awk读取的每一行都会运行该语句块。

第三步:当读至输入流末尾时,运行END{ commands }语句块。 END语句块在awk从输入流中读取全然部的行之后即被运行。比方打印全部行的分析结果这类信息汇总都是在END语句块中完毕,它也是一个可选语句块。

这三个部分缺少任何一部分都可以。

 

可用awk来统计固定格式日志里的一些数据,如日志中出现过所有不同的IP

awk ‘{i=$1;count[i]++}END{for(i in count)print(i,count[i])}’ /var/log/httpd/access_log

 

awk对文件进行流处理,每次读取一行。$1就是IP,count[i]++是将IP作为一个数组的下标,并且使得统计这个IP所对应的数组元素自增1.END后面的语句是打印结果,只执行一次。

 

也可以用来找出访问次数最多的ip。

awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志文件 | sort -n | tail -n 10 #用tail显示最后10行

首先用awk统计出来一个列表,然后用sort进行排序,最后用tail取最后的10个。

 

当前WEB服务器中联接次数最多的ip地址

netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -nr

 

查看日志中访问次数最多的前10个IP

cat access_log |cut -d ' ' -f 1 | sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 | less

 

 

查看日志中出现100次以上的IP

cat access_log |cut -d ' ' -f 1 | sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr | less

 

查看最近访问量最高的文件

cat access_log | tail -10000 | awk '{print $7}' | sort | uniq -c | sort -nr | less

 

列出传输时间超过 30 秒的文件

cat access_log | awk '($NF > 30){print $7}' | sort -n | uniq -c | sort -nr | head -20

 

查看最近访问量最高的文件

cat access_log | tail -10000 | awk '{print $7}' | sort | uniq -c | sort -nr | less 

 

列出最最耗时的页面(超过60秒的)

cat access_log | awk '($NF > 60 && $7~/\.php/){print $7}' | sort -n | uniq -c | sort -nr | head -100

 

统计平均数

awk '{sum+=$1} END {print "Average = ", sum/NR, sum, NR}'

统计次数

awk ' {++S[$1]} END {for(a in S) print S[a], a}' | sort -n

posted @ 2021-11-19 17:27  云敬轩  阅读(72)  评论(0编辑  收藏  举报