前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux awk学习

Linux awk学习

作者头像
信安本原
发布2020-03-08 18:15:36
4.2K0
发布2020-03-08 18:15:36
举报
文章被收录于专栏:信安本原

awk是Linux三剑客之一,在我们处理文件等方面还是特别方便的

介绍

我们先来说一说awk是用来干什么的,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

我们可以先来看一下awk的版本号

用法

awk命令是由模式和动作的组合组成的

代码语言:javascript
复制
awk [options] 'pattern {action}' file

模式,pattern,可以理解为sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。

动作,action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。

通俗来说pattern就是找谁,action就是干啥

awk处理的内容可以来自标准输入(<),一个或多个文本文件或管道

实践

我们先准备一个文件来用来进行后面的测试

我们先用一个语句来说一下awk的运作方式

awk是通过一行一行来处理文件的,上面这条语句执行的过程就是:

1.awk读入一行内容

2.判断是否符合模式中的条件(NR>=2),如果匹配到则执行对应的动作({print $0}),如果没有匹配到,继续读取下一行

3.继续读取下一行

4.重复1-3,直到读取到最后一行

其中的$0实际上是awk的内置变量,代表的是当前一整行记录,awk的内置变量有很多,我们这里举出其中的几个来进行说明,可以借用这些内容来进行各种方式的分割操作

为了更方便的了解,画一个图就很清楚了

接下来再举一些例子来说明

使用NR控制了只要2-5行的内容,使用冒号进行分割,然后输出第一段和第三段的内容,上面对比一下就很清楚了

上面是使用冒号进行分割是在一行进行分割的,也是支持在多行进行分割的,awk对每个要处理的输入数据认为都是具有格式和结构的,而不是一堆字符串,默认情况下,每一行内容都是一条记录,并且以换行符结尾,我们可以用整行来进行输出

如果想要以冒号来分割并进行换行的话,可以这样操作

这里再解释一下那个BEGIN是做什么的

代码语言:javascript
复制
BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作{}: 逐行处理END{}: 处理完最后以行文本后执行,一般用来处理输出结果

接下来再说一下正则表达式的应用

比如我们来匹配一下以字符u开头的整行记录

也可以对其进行指定区域的匹配,匹配第三个区域开头是字符u的记录

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无心的梦呓 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档