awk简介

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。

awk、sed、grep更适合的方向

  1. grep 更适合单纯的查找或匹配文本
  2. sed 更适合编辑匹配到的文本
  3. awk 更适合格式化文本,对文本进行较复杂格式处理

awk 工作原理

awk工作流程可分为三个部分:

  1. 读输入文件之前执行的代码段(由BEGIN关键字标识)。
  2. 主循环执行输入文件的代码段。
  3. 读输入文件之后的代码段(由END关键字标识)。

命令结构:

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

下面的流程图描述出了 AWK 的工作流程:
awk 介绍及简单使用

  1. 通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。
  2. 完成 BEGIN 块的执行,开始执行body块。
  3. 读入有 \n 换行符分割的记录。
  4. 将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容),11 表示第一个域,n 表示第 n 个域。
  5. 依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。
  6. 循环读取并执行各行直到文件结束,完成body块执行。
  7. 开始 END 块执行,END 块可以输出最终结果。

开始块(BEGIN)
开始块的语法格式如下:

BEGIN {awk-commands}

开始块就是在程序启动的时候执行的代码部分,并且它在整个过程中只执行一次。
一般情况下,我们可以在开始块中初始化一些变量。
BEGIN 是 AWK 的关键字,因此它必须是大写的。
注意:开始块部分是可选的,你的程序可以没有开始块部分。
主体块(BODY)
主体部分的语法格式如下:

/pattern/ {awk-commands}

对于每一个输入的行都会执行一次主体部分的命令。
默认情况下,对于输入的每一行,AWK 都会执行命令。但是,我们可以将其限定在指定的模式中。
注意:在主体块部分没有关键字存在。
结束块(END)
结束块的语法格式如下:

END {awk-commands}

结束块是在程序结束时执行的代码。 END 也是 AWK 的关键字,它也必须大写。 与开始块相似,结束块也是可选的。

实例

先创建一个名为 marks.txt 的文件。其中包括***、学生名字、课程名称与所得分数。
awk 介绍及简单使用
程序开始执行时,AWK 在开始块中输出表头信息。在主体块中,AWK 每读入一行就将读入的内容输出至标准输出流中,一直到整个文件被全部读入为止。

具体详细用法参考:

  1. awk 具体详细用法
  2. awk 官方手册

相关文章: