1、awk是什么?
awk命令的作用是进行文本扫描、处理以及报表的生成。awk命令有自己的语法规则,官方说法叫“样式扫描和处理语言”,其语法借鉴了C语言的精华。由于其强大的文本分析能力与格式化输出能力,awk命令成为Linux环境开发者的必备杀器,与grep命令、sed命令一起被称为Linux三剑客。熟练运用awk命令能让我们的日常工作变得高端同时也高效起来。
2、awk的基本使用
awk对文本的扫描是以行为单位的,也就是说awk一次从文本中读取一行的内容。awk使用的一般形式为:awk {pattern + action} file,执行流程为:一次从文件中读取一行,在读取的内容中如果匹配到与pattern符合的文本,则执行action操作,然后继续处理下一行;如果没有匹配到与pattern符合的文本则直接执行下一行。这里花括号不是必须的,pattern也不是必须的。
下面用两个小例子来说明,使用awk命令查看test.txt的第5到第10行的内容:
图中NR为awk命令所扫描的行数,awk命令会对test.txt逐行行扫描并判断行号范围,如在在5~10行之间则输出行号和改行的内容。
查看当前文件夹下以.sh为后缀的文件也一样可以使用awk配合正则表达式来处理。
3、awk最常用的特色
1)wak可以使用-F来指定分隔符,在进行行扫描时依据分隔符将一行的文本分割为几个字段。例如将以下文本中的单词挑选出来,该文本中的单词是以空格和逗号为分隔符的。
当需要对文本或字符串的字段进行分析时,-F选项往往都能帮到我们。
2)awk命令可以定义开始代码块和结束代码块。
awk每扫描完一行都会将action执行一次,但是在一些情况下,我们希望能够在开始扫描前初始化一些信息,扫描结束后将多行的扫描结果做一个统计输出。这是开始代码块和结束代码块就可以派上用场了。
开始代码块和结束代码块使用BEGIN和END来进行定义。例如统计字符串中某个字符出现的次数,则可以以如下形式使用BEGIN和END。
BEGIN代码块会在开始扫描前执行一次,END代码块会在扫描结束后执行一次,而中间的action则是每扫描完一行就执行一次。
4、实战举例
上一期我们使用grep命令对ip进行了简单的过滤,但是却没有判断ip每个字段的范围是否合理,这里我们使用awk命令来完成各段ip的解析。如下图:
5、小结
awk有强大的文本分析能力,而上一期所说的grep命令有着强大的文本搜索能力,这两者常常会配合使用来完成Linux系统中的各种文件操作。下一期将学习Linux三剑客中的sed命令,sed侧重与文本的处理、编辑能力。
如果您对Linux shell脚本编程感兴趣,可以点击我的个人主页查看更多往期内容。
关注 [睡前笔记] 百家号,利用零碎时间了解更多计算机领域干货。
0 留言