【拔刀吧少年】之awk文本和数据处理编程语言
AWK
- 1. 什么是awk
- 2. 基本格式
- 3. 工作原理
- 4. 常见的内建变量(可直接用)
- 5. 按行输出文本
- 6. 按字段输出文本
- 7. 通过管道、双引号调用shell命令
- 8. 小案例 :awk集合getline、数组的用法
1. 什么是awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
相较于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据。
2. 基本格式
awk后面接两个单引号并加上大括号{ }来设置想要对数据进行的处理操作,awk可以处理后续接的文件,也可以读取来自前个命令的标准输,但如果awk主要是处理每一行的字段内的数据时,默认的字段分隔符为“空格键”或“Tab键”
3. 工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中, 并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、"“表示"或”、"!“表示"非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
4. 常见的内建变量(可直接用)
FS∶ 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF∶ 当前处理的行的字段个数
。
NR∶ 当前处理的行的行号(序数)
。
$0∶当前处理的行的整行内容。
$n∶ 当前处理行的第n个字段(第n列)。
FILENAME∶ 被处理的文件名。
RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。
5. 按行输出文本
实例1:输出全部内容
实例2:输出第1到第3行的内容
实例3:输出第1行和第3行的内容,输出奇数和偶数行,像sed -n ‘n;p’
实例4:输出包含指定字符的行
实例5:输出包含指定字符的行并统计有多行
分析:
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;
awk再处理指定的文本,之后再执行END模式中指定的动作;
END{ } 语句块中,往往会放入打印结果等语句。
6. 按字段输出文本
实例1:输出指定分隔符的指定字段
实例2:输出指定字段在指定范围内的行,并选择输出的字段
实例3:awk结合三元运算符的使用。
实例4:输出行和内容
实例5:输出指定字段中包含指定字符的行,然后输出指定字段。
7. 通过管道、双引号调用shell命令
实例1:输出文本内容,结合awk以指定字符为分隔符,然后统计出行数。
实例2:awk结合管道命令使用
实例3:查看当前内存使用百分比
实例4:查看当前系统的CPU的空闲率
实例5:显示上次系统重启的时间
8. 小案例 :awk集合getline、数组的用法
案例1:统计在线用户的数量
分析:
当getline左右无重定向符“<”或“1”时,awk首先读取到了第一行,就是1,然后getline, 就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF, NR,FNR和$0等 内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。
当getline左右有重定向符“<”或“I”时,getline则作用 于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入那么getline返回的是该文件的第一行, 而不是隔行。
案例2:分别显示0到10的奇数和偶数行
案例3:指定分隔符来分隔字符串
$1=$1是用来激活$0的重新赋值,也就是说
字段$1…和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
案例4:使用awk创建数组,并循环
案例5:使用awk来统计httpd访问日志中每个客户端IP出现的次数,超过三次进行提示。
awk ‘/Failed password/ {ip[$11]++}; END {for(i in ip){print i,ip[i]}}’ /var/log/secure
1.先测试好提取ip和次数的正确命令,方便我们直接在脚本里面使用。
2.根据第一步的命令再次使用awk进行ip和次数的提取,然后做个if判断即可。
3.测试结果
【拔刀吧少年】之awk文本和数据处理编程语言相关推荐
- shell脚本详解(十一)——awk文本和数据处理编程语言
shell脚本详解(十一)--awk文本和数据处理编程语言 一.awk命令 – 文本和数据进行处理的编程语言 1.工作原理 2.命令格式 3.awk常见的内建变量(可直接使用) 4.按行输出文本 5. ...
- 【拔刀吧少年】之sed编辑器
sed 一.sed编辑器 二.sed编辑器工作流程 1.读取 2.执行 3.显示 三.命令格式 四.常用选项 五.常用操作 六.使用地址 七.删除行 八.替换 1.格式 2.4种替换标记 九.插入 一 ...
- 【拔刀吧少年】之正则表达式
序言 正则表达式 通常用于判断语句中,用于检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母.数字.标点符号及一些其他符号 元字符是指在正则表达式中具有特殊意义 ...
- 【拔刀吧少年】之shell编程规范与变量
shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...
- 【拔刀吧少年】之Expect 自动化控制和测试 Here Document 免交互
免交互 一.Here Document免交互 1.1 概述 1.2 语法格式 1.3 简单案例 1.4 支持变量替换 1.5 多行注释 1.6 完成自动划分磁盘免交互 二.Expect进行免交互 2. ...
- 【拔刀吧少年】之sort uniq tr cut eval常用命令
sort uniq tr cut eval 一.排序命令--sort 1.格式 2.常用选项 二.去除重复行操作命令--uniq 1.格式 2.常用选项 3.示例 三.字符转换命令--tr 1.格式 ...
- 【拔刀吧少年】之shell数组
数组 一.数组 1.数组的定义方法 2.数组包括的数据类型 3.获取数组长度 4.获取数据列表 5.读取某索引赋值 6.数组遍历 7.数组切片 8.数组替换 9.数组删除 10.数组追加元素 二.数组 ...
- 【拔刀吧少年】之shell函数
函数 一.shell函数定义 二.格式 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归查目录 七.创建函数库 总结 一.shell函数定义 将命令序列按格式写在一起 ...
- 【拔刀吧少年】之循环三兄弟for while until
循环三兄弟 一.echo命令 – 输出字符串或提取Shell变量的值 1.格式 2.常用参数 3.常用的转义字符 二.循环语句 1.for循环结构 2.while循环语句结构(迭代) 3.until ...
最新文章
- 新到DELL M1000e 刀片服务器
- adb logcat通过包名过滤(dos命令find后跟变量)
- 数据库元数据数据字典查询_6_列出给定表的外键引用
- 像亲和数一样亲密无间(洛谷P1851题解,Java语言描述)
- HTMl悬浮播放器XPlayer,XPlayer万能视频播放器
- java linux 时间戳转时间_Java时间和时间戳的相互转换
- 通信专业顶刊_通信类期刊排名_2016通信期刊排名_2016通信前沿新技术
- 数据挖掘之大数据流处理
- linux怎么卸载字体,Ubuntu下字体安装与卸载
- 51nod2384 事后诸葛亮
- 高树玛丽亚在线观看_音乐玛丽亚·凯里的数学数字
- 【补作业】msp430单片机(一)控制LED灯的亮灭
- TB6612FNG模块使用说明
- Solr DIH dataConfig参数XXE漏洞
- vue 右键菜单contextMenu
- java企业开发四:ssh+JPA(hibernate实现)
- fwrite和fread函数的用法小结
- 解决Idea Maven生成的jar运行出现“没有主清单属性”问题
- 基于android公交车线路查询论文文献,基于Android手机的实时公交查询系统设计与实现...
- dedecms 模板引用php文件名,织梦DEDECMS模板文件名介绍与说明
热门文章
- android使组件居中,Android图文居中显示控件使用方法详解
- 质数环问题c语言,素数环问题
- python中title用法_在CSV fi中使用Title()
- 商品规格js_品优购电商系统开发 第3章 规格及模板管理
- docker 安装 minio
- 打包文档_苏教版小学数学16年级全十二册教案Word文档打包下载
- redis插件连接集群 shiro_Shiro经过Redis管理会话实现集群(转载)
- python监控端口_python3 端口监控
- dropout理解(三)
- 小米高管否认鸿蒙,小米参加华为鸿蒙系统实验?小米高管终于回应,网友评论炸了!...