博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk学习笔记(二)
阅读量:5877 次
发布时间:2019-06-19

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

一、awk流程控制

1.分支结构
if
语法 单分支-if(判断){指令}
双分支-if(判断){指令}else{指令}
多分支-if(判断){指令}else if(判断){指令}else{指令}
例子 监控某网卡收发流量
ifconfig eth0 |awk 'BEGIN{print "接收流量","发送流量"}/bytes/{if($1=="RX"){x=$5}else{y=$5}}END{print x,y}'
思路 先将接收和发送流量对应的列找出来,因为在同一列,要打印出不同的值,需要增加条件,分别用不同的变量储存那一列的值

2.循环结构

while
语法 while(判断){指令}
例子(求词频)
1)统计/etc/passwd下的root有多少个
awk -F: '{i=1;while(i<=NF){if($i~/root/){x++};i++}}END{print x}' /etc/passwd

思路 先写结构,再写循环,最后组合;用一个变量遍历列做循环,用一个变量记录root

结构: awk -F: '{}' /etc/passwd

循环:

i=1
while(i<=NF){
if($i~/root/){x++}
i++
}
#i负责每行(awk为逐行处理)循环的次数
#将i与列数NF比较,每一列循环一次,直到该行的每一列参数都取遍
#i在第一列的参赛中是否包含root(模糊匹配),是则x+1(x默认0)

二、awk数组

1.定义数组
给数组赋值
格式 :数组名[下标]=元素名
例子 :
awk 'BEGIN{a[0]=11;a[1]=22}'
awk '{IP[$n]}'
#数组中未定义的变量,如 a[2] 的值也是默认为0
#将每行第n列的参数分别读入数组IP的[ ]中,作为数组IP的元素『常用作统计某文件里每个IP(或者名字之类)(都在某一列)出现了多少次』

2.遍历数组

用for实现
格式:for(变量 in 数组名){print 数组名[变量]}
例子 找出***者
awk '{IP[$1]++}
END{for(i in IP){print i,IP[i]}}'
/var/log/httpd/access_log
| awk '$1>100{print $2}'

#读取的不同IP视为数组IP中的不同元素,IP[$1]++即统计每个元素出现的次数(每个元素初值为0,每读一个IP该元素的值+1)

#在结尾处插入for循环『给 i 赋值为数组IP的不同下标(下标必须由数字组成,可以是IP)』,每当i取一个下标,打印该下标(即IP)和该下标对应的元素的值(出现次数)
#注:用for循环对数组的下标取值操作貌似只能用在awk语句中

转载于:https://blog.51cto.com/13455186/2065617

你可能感兴趣的文章
oracle常用函数
查看>>
MYBATIS
查看>>
详解消息队列的设计与使用
查看>>
iOS 项目优化
查看>>
筛选出sql 查询结果中 不包含某个字符
查看>>
8进制与16进制
查看>>
使用Sqoop从mysql向hdfs或者hive导入数据时出现的一些错误
查看>>
mybatis:Invalid bound statement (not found)
查看>>
电脑中毒的现象
查看>>
django表单操作之django.forms
查看>>
ZipOutputStream出现多层目录问题
查看>>
Android Studio 3.0.1 版本包下载
查看>>
[python] 创建临时文件-tempfile模块
查看>>
真的只是随笔
查看>>
洛谷P3676 小清新数据结构题(动态点分治+树链剖分)
查看>>
php curl 上传json数据
查看>>
apt仓库以及apt-get分析
查看>>
Hadoop和HBase中出现 ssh登录 The authenticity of host 192.168.0.xxx can't be established.
查看>>
[学习笔记]快速幂&&快速乘
查看>>
CF1158F Density of subarrays
查看>>