Linux shell脚本编程入门系列七:linux三剑客之awk

频道:行业资讯 日期: 浏览:724

1、awk是什么?

awk命令的作用是进行文本扫描、处理以及报表的生成。awk命令有自己的语法规则,官方说法叫“样式扫描和处理语言”,其语法借鉴了C语言的精华。由于其强大的文本分析能力与格式化输出能力,awk命令成为Linux环境开发者的必备杀器,与grep命令、sed命令一起被称为Linux三剑客。熟练运用awk命令能让我们的日常工作变得高端同时也高效起来。

Linux shell脚本编程入门系列七:linux三剑客之awk

2、awk的基本使用

awk对文本的扫描是以行为单位的,也就是说awk一次从文本中读取一行的内容。awk使用的一般形式为:awk {pattern + action} file,执行流程为:一次从文件中读取一行,在读取的内容中如果匹配到与pattern符合的文本,则执行action操作,然后继续处理下一行;如果没有匹配到与pattern符合的文本则直接执行下一行。这里花括号不是必须的,pattern也不是必须的。

下面用两个小例子来说明,使用awk命令查看test.txt的第5到第10行的内容:

Linux shell脚本编程入门系列七:linux三剑客之awkawk命令扫描文本

图中NR为awk命令所扫描的行数,awk命令会对test.txt逐行行扫描并判断行号范围,如在在5~10行之间则输出行号和改行的内容。

查看当前文件夹下以.sh为后缀的文件也一样可以使用awk配合正则表达式来处理。

Linux shell脚本编程入门系列七:linux三剑客之awk文件过滤

3、awk最常用的特色

1)wak可以使用-F来指定分隔符,在进行行扫描时依据分隔符将一行的文本分割为几个字段。例如将以下文本中的单词挑选出来,该文本中的单词是以空格和逗号为分隔符的。

文本信息

当需要对文本或字符串的字段进行分析时,-F选项往往都能帮到我们。

Linux shell脚本编程入门系列七:linux三剑客之awk单词解析

2)awk命令可以定义开始代码块和结束代码块。

awk每扫描完一行都会将action执行一次,但是在一些情况下,我们希望能够在开始扫描前初始化一些信息,扫描结束后将多行的扫描结果做一个统计输出。这是开始代码块和结束代码块就可以派上用场了。

开始代码块和结束代码块使用BEGIN和END来进行定义。例如统计字符串中某个字符出现的次数,则可以以如下形式使用BEGIN和END。

Linux shell脚本编程入门系列七:linux三剑客之awkBEGIN与END
Linux shell脚本编程入门系列七:linux三剑客之awk执行结果

BEGIN代码块会在开始扫描前执行一次,END代码块会在扫描结束后执行一次,而中间的action则是每扫描完一行就执行一次。

4、实战举例

上一期我们使用grep命令对ip进行了简单的过滤,但是却没有判断ip每个字段的范围是否合理,这里我们使用awk命令来完成各段ip的解析。如下图:

Linux shell脚本编程入门系列七:linux三剑客之awkawk检查ip合法性
Linux shell脚本编程入门系列七:linux三剑客之awk输出结果

5、小结

awk有强大的文本分析能力,而上一期所说的grep命令有着强大的文本搜索能力,这两者常常会配合使用来完成Linux系统中的各种文件操作。下一期将学习Linux三剑客中的sed命令,sed侧重与文本的处理、编辑能力。

如果您对Linux shell脚本编程感兴趣,可以点击我的个人主页查看更多往期内容。

关注 [睡前笔记] 百家号,利用零碎时间了解更多计算机领域干货。

举报/反馈

0 留言

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码