自学Linux Shell19.1-gawk程序基础特性
19.1-gawk程序基础特性
linux世界中最广泛使用的两个命令行编辑器:
- sed
- gawk
1. gawk概念
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
- 定义变量来保存数据
- 使用算术和字符串操作符来处理数据
- 使用结构化编程概念来为数据处理增加处理逻辑
- 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告
gawk的报告生成能力通常用来从大文本文件中提取数据元素,并将它们格式化成可读 的报告,完美的例子是格式化日志文件。
在所有的发行版中都没有默认安装gawk程序。
2. gawk格式化
awk '{pattern + action}' {filenames}
- -F fs 指定行中划分数据字段的字段分隔符
- -f progfile 从指定的文件中读取程序
- -v var=value 定义gawk程序中的一个变量及其默认值
- -mf N 指定要处理的数据文件中的最大字符段数
- -mr N 指定数据文件中的最大数据行数
- -w keyword 指定gawk的兼容模式或告警等级
gawk强大之处在于可以写脚本来读取文本行的数据,然后处理并显示数据。
2.1 从命令行读取程序脚本
必须将脚本命令放到两个花括号{ } 中。
以上运行gawk’{print"hello word"}‘不会有任何反应,print命令会将文本打印到STDOUT,但没有在命令行上指定文件名,所以gawk只会从STDIN接收数据。
若输入一个文本并按下回车键,不管你在数据流中输入什么,都会得到同样的输出hello word 。
ctrl+D组合键会在bash中产生一个EOF字符,便是数据流已经结束。
2.2 使用数据字段变量
gawk会自动给一行中的每个数据元素分配一个变量,默认情况下,会将如下变量分配给它在文本行中发现的数据字段:
- $0代表整个文本;
- $1代表文本行中的第一个数据字段;
- $2代表文本行中第二个字段;
- $n代表文本行中第N个字段
每个数据字段是通过字段分隔符划分的,默认字段分割符是任意的空白字符(如空格或制表符)。
2.3 在程序脚本中使用多个命令
如果要在命令行的脚本中使用多条命令,只要在命令之间放个分号;即可。
2.4 从文本中读取程序
- 允许将程序储存在文件中,然后在命令行中引用。
- 可以在文件中指定多条命令,只要一条命令放一行就可以,不需要使用分号。
2.5 从处理数据前/处理数据后运行脚本
默认情况,gawk会从输入中读取一行文本,然后针对该行的数据执行程序脚本,但有时可能需要在处理数据前或数据后运行脚本:
- BEGIN关键字,强制gawk在读取数据前执行BEGIN关键字后指定的程序脚本
- END关键字,gawk在读完数据之后执行END关键字后的程序
自学Linux Shell19.1-gawk程序基础特性的更多相关文章
- 自学Linux Shell19.2-gawk程序高级特性
点击返回 自学Linux命令行与Shell脚本之路 19.2-gawk程序高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk使用变量 编程语言共有的特性是使用变 ...
- 自学Linux Shell4.1-监测程序ps top kill
点击返回 自学Linux命令行与Shell脚本之路 4.1-监测程序ps top kill 1. PS命令 linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的 ...
- Linux上bash的部分基础特性:
命令补全: tab shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令 命令查找机制: 查找内部命令: 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名 ...
- 自学Linux命令行与Shell脚本之路
自学Linux命令行与Shell脚本之路[第一回]:初识Linux 1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3 ...
- 自学Linux Shell18.1-sed编辑器基础特性
点击返回 自学Linux命令行与Shell脚本之路 18.1-sed编辑器基础特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed概念 sed是stream edito ...
- linux文件系统及bash基础特性
linux文件系统 一.根文件系统 linux被识别的第一个被称为根之间关联的文件系统叫做根文件系统(rootfs),其他分区要想被读到,需要挂载到根目录的某个挂载点(根的子目录)上.根文件系统至关重 ...
- 自学Linux Shell9.1-安装软件程序
点击返回 自学Linux命令行与Shell脚本之路 9.1-linux安装软件程序 PMS利用一个数据库来记录各种相关内容: Linux系统安装了什么软件包 每个包安装什么文件 每个已安装软件包的版本 ...
- 自学Linux Shell18.2-sed编辑器高级特性
点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...
- linux基础(2)-基础命令和基础特性
基础命令 命令历史 命令历史的管理 登陆 shell 时,会读取命令历史文件中记录下的命令: ~/.bash_history . 登陆进 shell 后,新执行的命令只会记录在缓存中,这些命令会在用户 ...
随机推荐
- JS-隐士类型转换‘1’+1、‘1’-1、++‘1’为什么不一样?
当 x=’1’时,x+1x-1+x-x++xtypeof(x+1)typeof(x-1)typeof(+x)typeof(-x)typeof(++x) 的结果分别是多少? 答案: x+1 //’11’ ...
- [Python]Python Class 中的 函数定义中的 self
In [80]: class MyClass001: ....: def selfDemo(self): ....: print 'My Demo' ....: In [81]: p = MyClas ...
- C#实现.Net对邮件进行DKIM签名和验证,支持附件,发送邮件签名后直接投递到对方服务器(无需己方邮件服务器)
项目地址 https://github.com/xiangyuecn/DKIM-Smtp-csharp 主要支持 对邮件进行DKIM签名,支持带附件 对整个邮件内容(.eml文件)的DKIM签名进行验 ...
- JavaScript如何实现继承
// 原型方式的'继承' function Person(name) { //定义一个Person的构造函数 this.name = name; //添加属性 } Person.prototype.s ...
- zookeeper Error contacting service 解决
连接kafka集群,有一个kafka机器连接失败 到该kafka机器上查询kafka进程,发现没有, 再查看zookeeper状态,提示 Error contacting service. It is ...
- mysql连接数设置操作(Too many connections)及设置md5值的加密密码
mysql在使用过程中,发现连接数超了~~~~ [root@linux-node1 ~]# mysql -u glance -h 192.168.1.17 -pEnter password: ERRO ...
- DRBD详细解说及配置过程记录
一.DRBD介绍 DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等 ...
- c++ 中关于一些变量不能声明的问题
j0,j1,jn,y0,y1,yn被c++中某些函数占用了,所以是不能被声明的,今天就遇到了这个问题,结果我在自己写的程序中找了半天都没找到重复申明的y1
- 《Linux内核设计与实现》 第十八章学习笔记
调 试 一.准备开始 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 知道这个bug最早出现在哪个内核版本中. 1.想要成功进行调试: 让这些错误重现 抽象出问题 从代码中搜索 二. ...
- 软件项目第一次Sprint总结
成果评分表: 组名 分数 原因 9-652 6 界面和谐生动,可运行,在目前阶段可时间基本操作 hzsy -2 代码下载,但实现安卓和相机调用 JYJe族 -1 实现安卓界面,完成一项功能,做得少 结 ...