AWK - 工作流程

要成为专家级的 AWK 程序员,您需要了解其内部结构。 AWK 遵循简单的工作流程 − 读取、执行和重复。 下图描述了 AWK 的工作流程 −

AWK 工作流程

读取

AWK 从输入流(文件、管道或标准输入)中读取一行并将其存储在内存中。

执行

所有 AWK 命令都按顺序应用于输入。 默认情况下,AWK 在每一行上执行命令。 我们可以通过提供模式来限制这一点。

重复

这个过程会一直重复,直到文件结束。


程序结构

现在让我们了解一下 AWK 的程序结构。

BEGIN 块

BEGIN 块的语法如下 −

语法

BEGIN {awk-commands}

BEGIN 块在程序启动时执行。 它只执行一次。 这是初始化变量的好地方。 BEGIN 是一个 AWK 关键字,因此它必须是大写的。 请注意,此块是可选的。

Body 块

body 块的语法如下 −

语法

/pattern/ {awk-commands}

body 块在每个输入行上应用 AWK 命令。 默认情况下,AWK 在每一行执行命令。 我们可以通过提供模式来限制这一点。 请注意,Body 块没有关键字。

END 块

END 块的语法如下 −

语法

END {awk-commands}

END 块在程序结束时执行。 END 是一个 AWK 关键字,因此它必须是大写的。 请注意,此块是可选的。

让我们创建一个文件marks.txt,其中包含序列号、学生姓名、科目名称和获得的分数。

1)  Amit    Physics  80
2)  Rahul   Maths    90
3)  Shyam   Biology  87
4)  Kedar   English  85
5)  Hari    History  89

现在让我们使用 AWK 脚本显示带有标题的文件内容。

示例

[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt

执行此代码时,会产生以下结果 −

输出

Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89

开始时,AWK 从 BEGIN 块打印标题。 然后在正文块中,它从文件中读取一行并执行 AWK 的打印命令,该命令仅在标准输出流上打印内容。 重复此过程,直到文件到达末尾。