AWK 命令2025年3月17日 | 阅读 8 分钟 awk 命令在 Linux 中用于文本处理。虽然 sed 命令也用于文本处理,但它有一些局限性,因此 awk 命令成为文本处理的得力助手。它提供了对数据的强大控制。 Awk 是一种强大的用于文本脚本的脚本语言。它搜索和替换文本,以及排序、验证和索引数据库。 它是程序员最广泛使用的工具之一,因为他们以语句的形式编写缩减的有效程序,以定义文本模式和设计。 它在 Linux 中充当过滤器。在 Linux 中,它也被称为gawk (GNU awk)。 AWK 命令是一种领域特定语言,专为文本处理而开发,并用作报告和数据提取工具。它是一种数据驱动的脚本语言,由一组要对文本数据流采取的操作组成——可以直接在文件上运行,也可以作为管道的一部分使用——目的是转换和提取数据,例如生成格式化报告。 该语言使用正则表达式、关联数组和字符串数据类型。该语言是图灵完备的,早期的 AWK Bell Lab 用户经常指定结构良好的 AWK 程序,而 AWK 的应用领域有限,并且是专门为支持单行程序而开发的。 它为什么被命名为 AWK?该命令的命名使用了创建该命令原始版本的三个人的名字的首字母,时间是 1977 年。他们的名字是Alfred Aho、Peter Weinberger和Brian Kernighan,他们来自AT&T Bell Laboratories。 AWK 命令的特性Awk 命令的各种特性如下:
语法 Awk 命令的使用方法如下: 选项可以是:
AWK 程序结构AWK 程序是由模式-动作对组成的集合,指定为: 其中动作是一组命令,条件是一个表达式。输入被分成记录,记录默认由换行符分隔,因此输入被分成不同的行。程序将所有记录与所有条件进行检查,并对所有为真的表达式执行动作。动作或条件都可以省略。条件默认为与所有记录相同。动作(默认)是显示记录。与 sed 一样,它具有类似的模式-动作结构。 除了常见的逻辑和算术运算符外,AWK 表达式还包含 '~'(波浪号运算符),它相当于对任何字符串进行正则表达式匹配。如果没有波浪号运算符,/regexp/ 就等于当前记录,因为它可以作为句法糖。该语法借鉴自 sed,sed 又借鉴自 ed 编辑器,在 ed 中,/ 用于搜索。这种使用斜杠作为正则表达式分隔符的语法已被 ECMAScript 和 Perl 采用,现在很普遍。此外,波浪号运算符也被 Perl 接受。 实现和版本最初,AWK 于 1977 年指定,并随 Unix Version 7 发布。AWK 的作者于 1985 年开始开发该语言,最重要的是增加了用户定义函数。该语言在 1988 年发布的《AWK 编程语言》一书中进行了定义,其实现已在 UNIX System V 版本中提供。 该版本有时被称为nawk或“new awk”,以避免与早期版本混淆。该实现于 1996 年根据免费软件许可证发布,至今仍由 Brian Kernighan 管理。
如何定义 AWK 脚本?要定义 awk 脚本,请使用 awk 命令,后跟用单引号 '' 包围的大括号 {},如下所示: 当我们每次执行该命令时,上面的命令都会打印输入的字符串。按CTRL+D键终止程序。请看下面的输出: ![]() AWK 命令示例为了更好地理解 Awk 命令,请看下面的示例: 让我们创建一个数据来应用各种 awk 操作。考虑来自不同专业的学生数据。 要创建数据,请按如下方式执行 cat 命令: 按CTRL + D键保存文件,然后按ESC键退出命令行编辑器。这将创建数据。请看下面的输出: ![]() 已创建学生数据,我们将在此数据上操作 awk 命令。 示例 1:列出具有指定模式的学生。 考虑以下命令: 输出 ![]() 示例 2:awk 命令的默认行为。 如果我们不指定模式,它将显示文件的所有内容。 考虑以下命令: 我们在上面的命令中没有指定任何模式,因此它将显示文件的所有行。 输出 ![]() 示例 3:打印指定的列。 如果我们在此命令中指定列号,它将仅打印该行。请看下面的输出: 上面的命令将打印第 1 列和第 5 列。如果文件系统中不存在第 5 列,它将仅打印第 1 列。 考虑下面的输出 ![]() 考虑以下命令: 上面的命令将列出第 1 和第 2 列。请看下面的输出: ![]() AWK 命令中的内置变量Awk 命令支持许多内置变量,包括 $1、$2 等,它们将文件内容分解为单独的段。 NR:用于显示行号。awk 命令对每一行执行一次操作。这些行称为记录。 NF:用于计算当前数据库中的字段数。 FS:用于创建字段分隔符,以将字段分隔到输入行中。 OFS:用于存储输出字段分隔符。它分隔输出字段。 ORS:用于存储输出记录分隔符。它分隔输出记录。它会自动打印 ORS 命令的内容。 示例 4:打印输出并显示行号。 要在输出中显示行号,请使用 NR 变量和 Awk 命令,如下所示: 考虑下面的输出 ![]() 示例 5:打印文件的最后一个字段。 要显示文件的最后一个字段,请使用 NF 变量和 Awk 命令,如下所示: 考虑下面的输出 ![]() 示例 6:按指定格式分隔输出。 要用 '-' 符号或 (:) 分号分隔输出,请使用 ORS 命令指定,如下所示: 上面的命令将用下划线 (_) 符号分隔输出。请看下面的输出: 示例 7:打印 1 到 8 的数字的平方。 要打印 1 到 8 的数字,请执行以下命令: 上面的命令将打印 1 到 8 的平方。请看下面的输出: square of 1 is 1 square of 2 is 4 square of 3 is 9 square of 4 is 16 square of 5 is 25 square of 6 is 36 square of 7 is 49 square of 8 is 64 示例 8:计算特定列的总和。 让我们创建一个数据来对列执行求和操作。要创建学生分数数据,请按如下方式执行 cat 命令: 按CTRL+D保存文件。我们已成功创建 StudentsMarks 数据。我们可以通过执行 cat 命令来检查它,如下所示: 要计算创建数据中的第三列,请执行以下命令: 输出 600 考虑下面的输出 ![]() 示例 9:查找一些单个记录。 要打印一些单个学生的分数记录,请执行以下命令: 上面的命令将从 StudentMarks 文件中打印出每个人的姓名及其分数。请看下面的输出: ![]() 示例 10:查找 exp 8 的值。 要查找 exp 8 的值,请执行以下命令: 上面的命令将打印 exp 8 的值。请看下面的输出: ![]() 下一主题Linux make 命令 |
我们请求您订阅我们的新闻通讯以获取最新更新。