awk一些常用基本方法详解

本文深入解析AWK命令的使用方法,包括参数配置、正则表达式应用及文件处理技巧。通过实例演示如何利用AWK进行数据筛选、替换、统计分析等操作,适用于日志分析、数据处理等场景。

awk 参数 ‘模式{动作}’ 文件
awk 参数 ‘条件(找谁){干啥}’ 文件
常用: -F 指定分隔符 取列,默认空格为分隔符

awk正则表达式
符号表达含义
*与前面的正则表达式的零个或多个出现匹配
.匹配任何单个字符
\转义随后的特殊字符
+匹配前面的正则表达式的一次或多次出现
^作为正则表达式的第一个字符,表示匹配行的开始,以什么开头
$作为正则表达式的最后一个字符,表示匹配行的结尾
?匹配前面的正则表达式的零次或一次出现
{n,m}匹配它前面某个范围内单个字符出现的次数,{n}将匹配n次出现,{n,}至少匹配n次出现,{n,m}匹配n和m之间的任意次出现

1.awk取行,匹配文件内容:

- awk -F":" '{print $1 " " $3}'  /etc/passwd    $1与$3之间手动添加空格分隔
- awk '/ljc/'    file      						显示文件file中包含ljc的匹配行。
- awk '!/ljc/'    file      					显示文件file中不包含ljc的匹配行。
- awk '/起始内容/,/终止内容/'   file				取包含内容的区间行区间匹配
- awk '/halt|sync/' file						匹配halt或者sync的行
- awk 'NR>=5 && NR<=10' file	  				取5到10行,逻辑与
- awk -F: '$1~/mail/ || $3>1 {print }' /ljc		取$1或者mail或者$3>1的行,逻辑或

2.awk中的替换:

替换但不修改文件内容:
gsub(/目标/,"替换为什么",第几列)
gsub(/目标/,"替换为什么") == gsub(/目标/,"替换为什么",$0)
例:
[root@ljc ~]# awk 'gsub(/halt/,"tihuang")' liangjc.txt 

3.BEGIN{} 模块计算

END{} 模块awk读取文件之后执行,先计算,最后END{}显示结果

数组运算一些常用例子

例1:分析access.log中每个ip地址出现的次数
[root@ljc~]# awk  '{h[$1]++}END{for(p in h) print p""h[p]}' access.log|sort -rnk2|head|column -t
58.220.223.62   12
112.64.171.98   14
114.83.184.139  122
例2:分析access.log中每个ip地址使用的流量总数
i=i+$10  ===   i+=$10
[root@ljc~]# awk  '{h[$1]+=$10}END{for(p in h) print p,h[p]/1024^2"MB"}' access.log |sort -rnk2|head |column -t
114.83.184.139   29.91MB
117.136.66.10    21.3922MB
116.216.30.47    20.4716MB
例3:分析secure文件中每个用户被破解的次数:
破解root用户的次数
[root@ljc~]# awk '/Failedpassword/{if($(NF-5)=="root")i++}END{print i}' secure-20181219
3283
例4:分析secure文件中每个ip地址破解你的次数
[root@ljc ~]# awk '/Failedpassword/{h[$(NF-3)]++}END{for(p in h) print p" "h[p]}' secure-20181219|sort-rnk2|column -t|head
218.65.30.25     68652
218.65.30.53     34326
例5:分析secure文件中每个用户被每个ip破解的次数
[root@ljc ~]# awk '/Failedpassword/{h[$(NF-5)" "$(NF-3)]++}END{for(p in h) print p""h[p]}' secure-20181219|sort -rnk3|column -t|head -20
root           218.65.30.25     68652
root          218.65.30.53     34326
root           218.87.109.154   21201
例6:分析access.log文件中每个ip地址的访问次数与每个ip地址使用的流量总数:

1)ip地址使用的流量总数

[root@ljc ~]#  awk '{h[$1]++;h[$1]+=$10}END{for(p in h)print p" "h[p]/1024^2"MB"}' access.log|column -t|sort-rnk2|head
114.83.184.139   29.9119MB
117.136.66.10    21.3937MB

2)ip地址的访问次数

[root@ljc ~]#  awk '{h[$1]""h[$1]++;s[$1]+=$10}END{for(t in h) print t" "h[t]}' access.log|column-t|sort -rnk2|head
58.220.223.62    12049
112.64.171.98    10856

3)每个ip地址的访问次数与每个ip地址使用的流量总数

[root@ljc ~]# awk '{h[$1]""h[$1]++;s[$1]+=$10}END{for(t in h) print t" "h[t]""s[t]/1024^2"MB"}' access.log|column -t|sort -rnk2|head
58.220.223.62    12049 12.0192MB
112.64.171.98    10856 14.5483MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值