博客
关于我
关于AWK的10个经典案例
阅读量:661 次
发布时间:2019-03-15

本文共 2049 字,大约阅读时间需要 6 分钟。

Nginx日志分析及其他AWK实用案例教程

1. Nginx日志分析

统计访问IP次数

awk '{a[$1]++}END{for(v in a) print v, a[v]}' access.log

统计访问大于100次的IP

awk '{a[$1]++}END{for(v in a){if(a[v] > 100) print v, a[v]}}' access.log

统计前10名访问IP

awk '{a[$1]++}END{for(v in a) print v, a[v] | "sort -k2 -nr | head -10"}' access.log

统计特定时间段内的访问IP

awk '$4 >="[02/Jan/2017:00:02:00" && $4 <="[02/Jan/2017:00:03:00" {a[$1]++}END{for(v in a) print v, a[v]}' access.log

统计上一分钟访问量

date=$(date -d '-1 minute')awk -v date=$date '$4~date{c++}END{print c}' access.log

统计最热门10个页面

awk '{a[$7]++}END{for(v in a) print v, a[v] | "sort -k1 -nr | head -n10"}' access.log

统计URL数量及内容大小

awk '{a[$7]++; size[$7] += $10}END{for(v in a) print a[v], v, size[v]}' access.log

统计每个IP的状态码数量

awk '{a[$1" "$9]++}END{for(v in a) print v, a[v]}' access.log

统计404状态码的访问IP

awk '{if($9 ~/404/) a[$1" "$9]++}END{for(i in a) print v, a[v]}' access.log

2. 两个文件的内容差异对比

找出b文件在a文件中的相同记录

awk 'FNR==NR{a[$0]; next}{if($0 in a) print $0}' a b

找出b文件中不在a文件中的记录

awk 'FNR==NR{a[$0]=1; next}{if(a[$0]!=1) print}' a b

3. 文件的内容合并

将a文件的内容按第二列合并到一行

awk 'FNR==NR{a[$1]=$0; next}{print a[$1], $2}' a bzhangsan 20 manlisi 23 womanwangwu 29 man

合并同一IP的服务名

awk 'BEGIN{FS=":";OFS=":"}{a[$1]=a[$1] $2}END{for(v in a) print v, a[v]}' a

4. 去除文本的第一行和最后一行

原始内容

seq 5 | awk 'NR>2{print s}{s=$0}'

5. 字符串拆分

方法1

echo "hello" | awk -F '"' '{split($0, a, "")}; for(v in a) print a[v]'

方法2

echo "hello" | awk '{split($0, a, "''"); for(v in a) print a[v]}'

6. 统计字符串中各字母出现的次数

示例

echo "a.b.c,c.d.e" | awk -F'[.,]' '{for(i=1; i<=NF; i++) a[$i]++}END{for(v in a) print v, a[v]'

7. 费用统计

示例

awk '{name[$1]++; cost[$1] += $2; number[$1] += $3} END{for(v in name) print v, cost[v], number[v]}'

8. 获取某列数字最大值

获取第三字段的最大值

awk 'BEGIN{max=0}{if($3 > max) max = $3} END{print max}'

打印达到最大值的行

awk 'BEGIN{max=0}{a[$0] = $3; if($3 > max) max = $3} END{for(v in a) if(a[v] == max) print v}'

9.290

10. Nginx upstream块内的后端IP及端口提取

示例

awk '/example-servers1/,/}/{if(NR>2)print s}{s=$2}' a

另一种实现方式

awk '/example-servers1/,/}/{if(i>1)print s}{s=$2; i++}' a

如果您需要进一步了解AWK脚本的使用方法和具体案例处理方式,欢迎随时交流!

转载地址:http://nixmz.baihongyu.com/

你可能感兴趣的文章
flask框架高性能教学资源平台设计与实现(毕设源码+论文)
查看>>
flask框架高校助学及勤工俭学管理系统(毕设源码+论文)
查看>>
flask框架高校图书管理系统设计与实现(毕设源码+论文)
查看>>
flask框架高校招生预报管理系统(毕设源码+论文)
查看>>
flask框架高校教师个人数字档案(毕设源码+论文)
查看>>
flask框架高校毕业生选题系统(毕设源码+论文)
查看>>
flask框架高校竞赛信息管理系统(毕设源码+论文)
查看>>
flask框架魔方教学网站毕设源码+论文
查看>>
Flask解决跨域访问问题(Access to XMLHttpRequest at ‘http://127.0.0.1:500been blocked by CORS policy: No ‘Acc)
查看>>
Flatterer: 快速JSON转换工具使用指南
查看>>
Flex / PHP Security Basics - Part One
查看>>
FLEX 4 :选择本地文件编辑
查看>>
Flex 与 spring mvc 整合 BlazeDB
查看>>
flex 动态创建组件之容器自适应大小
查看>>
java.net.ConnectException: no available server
查看>>
java 记事本程序_Java记事本程序Notebook
查看>>
Java 访问Kerberos认证的HDFS
查看>>
java 重载、重写、重构的区别
查看>>
Java 链表对象 链表翻转 对象中有对象的翻转 对象链表翻转指针
查看>>
Java 集合之 Queue
查看>>