awk是用来进行文本处理,它可以从文件或字符串中基于指定规则浏览和抽取信息,在抽取信息的基础上,才能进行其他文本操作。
awk编程模型
awk为程序员提供了完善的编程模型,理解awk编程模型非常重要,这有利于读者从宏观上理解awk,为学习具体的awk编程细节打下基础,
awk程序由一个主出入循环维持,主输入循环反复执行,直到终止条件被触发。当然,主输入循环无需由程序员去写,awk已经打好主输入循环的框架,程序员写的代码被嵌到主输入循环框架中执行。主输入循环自动依次读取输入文件行,以供处理,而处理文件行的动作是由程序员添加的。其他程序语言,如C、C++和JAVA等,程序员需要写一个main函数,然后打开文件、读取文件行、进行相应处理、关闭文件,但是,awk自动完成了上述步骤,是程序员可以更加便捷的书写程序,这正是awk和其他程序语言的本质区别。
awk还定义了两个特殊的字段:BEGIN和END,BEGIN用于在主输入循环之前执行,即在未读取输入文件行之前执行,END则相反,用于在主输入循环之后执行,即在读取输入文件行完毕后执行。我们也可以简单的将awk编程模型分成三个阶段:读输入文件之前的执行代码段(由BEGIN关键字标识)、读取输入文件时的执行代码段、读输入文件完毕之后的执行代码段(由END关键字标识)。
awk调用方法
调用awk的方法有三种方式,一种为Shell命令方式,另外两种是将awk程序写入脚本文件,然后执行该脚本文件。三种方式的命令格式归纳如下:
(1)在Shell命令行输入命令调用awk,格式为:
awk -F域分隔符 'awk程序段' 输入文件 例如: awk -F' ' '{print $0}' file.txt (以空格分割输出file.txt中所有域)
(2)将awk程序段插入脚本文件,然后通过awk命令调用它,格式为:
awk -f awk脚本文件 输入文件 例如: awk -f scr.awk file.txt scr.awk内容是:{print $0} 输出所有域,和(1)结果相同
(3)将awk命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:
./awk脚本文件 输入文件 例如: ./scr1.awk file.txt scr1.awk内容是:#!/bin/awk -f {print $0} 结果同上。
awk模式匹配
任何awk语句都由模式(pattern)和动作(action)组成。模式是一组用于测试输入行是否需要执行动作的规则,动作是包含语句、函数和表达式的执行过程。简言之,模式绝对动作何时触发和触发事件,动作执行对输入行的处理。本节通过一组例子讲述awk模式匹配,awk模式匹配经常需要用到正则表达式,awk支持所有正则表达式元字符,awk支持“?” 和“+”两个扩展元字符,而grep和sed并不支持。
例如: awk '/A/{print $0}' file.txt 结果同上
记录和域
awk定义域操作符$来指定执行动作的域,域操作符$后面跟数字或变量来标识域的位置,每条记录的域从1开始编号,如$1表示第一个域、$2表示第二个域。$0表示所有域。
未完 待续。。。