如何在 Linux 上使用 AWK如何在 Linux 上使用 AWK如何在 Linux 上使用 AWK如何在 Linux 上使用 AWK
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Linux 上使用 AWK

发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 提供的实用程序通常遵循 UNIX 的设计理念。任何工具都应该很小,使用纯文本进行 I/O,并以模块化方式操作。得益于这些遗产,我们在 sed 和 awk 等工具的帮助下拥有了一些最好的文本处理功能。

在 Linux 中,所有 Linux 发行版上都预安装了 awk 工具。 AWK 本身是一种编程语言。 AWK工具只是AWK编程语言的解释器。在本指南中,了解如何在 Linux 上使用 AWK。

AWK的使用

当文本以可预测的格式组织时,AWK 工具最有用。它非常擅长解析和操作表格数据。它在整个文本文件上逐行运行。

awk 的默认行为是使用空格(空格、制表符等)来分隔字段。值得庆幸的是,Linux 上的许多配置文件都遵循这种模式。

基本语法

这就是 awk 的命令结构。

$ awk '/<search_pattern>/ { <action_on_match>; <another_action>; }' <file>

该命令的各个部分是非常不言自明的。 awk 可以在没有搜索或操作部分的情况下运行。如果未指定任何内容,则匹配的默认操作将只是打印。基本上,awk 将打印文件中找到的所有匹配项。

如果没有指定搜索模式,那么 awk 将对文件的每一行执行指定的操作。

如果给出了两个部分,那么 awk 将使用该模式来确定当前行是否反映它。如果匹配,则 awk 执行指定的操作。

请注意,awk 还可以处理重定向的文本。这可以通过将命令的内容通过管道传递给 awk 来执行。了解有关 Linux 管道命令的更多信息。

出于演示目的,这里有一个示例文本文件。它包含 10 行,每行 2 个单词。

$ cat sample.txt

正则表达式

使 awk 成为强大工具的关键功能之一是支持正则表达式(简称 regex)。正则表达式是表示某种字符模式的字符串。

以下是一些最常见的正则表达式语法的列表。这些正则表达式语法不仅仅是 awk 所独有的。这些几乎是通用的正则表达式语法,因此掌握它们也将有助于涉及正则表达式的其他应用程序/编程。

  • 基本字符:所有字母数字字符、下划线(_)等。

    • 元字符:这些字符解释了扩展普通字符的各种方式。

      • 星号 (*):其前面的直接字符存在零个或多个是有效的。

      • 括号([]):如果在该位置,括号中的任何字符匹配,则匹配有效。它可以与字符集结合使用。

      • 插入符 (^):匹配项必须位于行的开头。

      • 美元 ($):匹配必须位于该行的末尾。

      • 反斜杠(\):如果任何元字符必须按字面意义使用。

    打印文本

    要打印文本文件的所有内容,请使用 print 命令。对于搜索模式,没有定义模式。因此,awk 打印所有行。

    $ awk '{print}' sample.txt

    这里,“print”是一个 AWK 命令,用于打印输入的内容。

    字符串搜索

    AWK 可以对给定文本执行基本文本搜索。在模式部分,它必须是要查找的文本。

    在以下命令中,awk 将在文件sample.txt 的所有行中搜索文本“quick”。

    $ awk '/quick/' sample.txt

    现在,让我们使用一些正则表达式来进一步微调搜索。以下命令将打印所有以“brown”开头的行。

    $ awk '/^brown/' sample.txt

    在行尾找到一些东西怎么样?以下命令将打印所有末尾带有“quick”的行。

    $ awk '/quick$/' sample.txt

    通配符图案

    下一个示例将展示插入符号 (.) 的用法。这里,字符“e”之前可以有任意两个字符。

    $ awk '/..e/'  sample.txt

    通配符模式(使用星号)

    如果该位置可以有任意数量的字符怎么办?要匹配该位置上任何可能的字符,请使用星号 (*)。在这里,AWK 将匹配“the”之后具有任意数量字符的所有行。

    $ awk '/the*/' sample.txt

    括号表达式

    下面的例子将展示如何使用括号表达式。括号表达式表明在该位置,如果匹配括号内的字符集,则匹配有效。例如,以下命令将“The”和“Tee”匹配为有效匹配项。

    $ awk '/T[he]e/' sample.txt

    正则表达式中有一些预定义的字符集。例如,所有大写字母的集合被标记为“A-Z”。在以下命令中,awk 将匹配所有包含大写字母的单词。

    $ awk '/[A-Z]/' sample.txt

    看看下面带有括号表达式的字符集的用法。

    • [0-9]:表示单个数字

    • [a-z]:表示单个小写字母

    • [A-Z]:表示单个大写字母

    • [a-zA-z]:表示单个字母

    • [a-zA-z 0-9]:表示单个字符或数字。

    awk 预定义变量

    AWK 附带了一堆预定义的自动变量。这些变量可以使使用 AWK 编写程序和脚本变得更加容易。

    以下是您会遇到的一些最常见的 AWK 变量。

    • FILENAME:当前输入文件的文件名。

    • RS:记录分隔符。由于 AWK 的性质,它一次处理一条记录的数据。这里,该变量指定用于将数据流分割成记录的分隔符。默认情况下,该值是换行符。

    • NR:当前输入的记录数。如果RS值设置为默认值,则该值将指示当前输入行号。

    • FS/OFS:用作字段分隔符的字符。读取后,AWK 将记录拆分为不同的字段。分隔符由 FS 的值定义。打印时,AWK 重新连接所有字段。不过,此时,AWK 使用 OFS 分隔符而不是 FS 分隔符。一般来说,FS和OFS是相同的,但不强制如此。

    • NF:当前记录中的字段数。如果使用默认值“whitespace”,那么它将匹配当前记录中的单词数。

    • ORS:输出数据的记录分隔符。默认值是换行符。

    让我们来看看它们的实际效果。以下命令将使用 NR 变量打印 example.txt 中的第 2 行到第 4 行。 AWK 还支持逻辑运算符,例如逻辑与 (&&)。

    $ awk 'NR > 1 && NR < 5' sample.txt

    要将特定值分配给 AWK 变量,请使用以下结构。

    $ awk '/<search_pattern>/ { <action_on_match>; <another_action>; }' <variable>=<value>, <input_file>

    例如,要从输入文件中删除所有空行,请将 RS 的值更改为基本无。这是一个使用晦涩难懂的 POSIX 规则的技巧。它指定如果 RS 的值为空字符串,则记录由由换行符和一个或多个空行组成的序列分隔。在 POSIX 中,没有内容的空行是完全空的。但是,如果该行包含空格,则它不被视为“空白”。

    $ awk '{print}' RS='' sample.txt

    其他资源

    AWK 是一个功能强大的工具,具有大量功能。虽然本指南涵盖了其中的很多内容,但它仍然只是基础知识。掌握 AWK 需要的不仅仅是这些。本指南应该是对该工具的很好的介绍。

    如果您确实想掌握该工具,那么您应该查看以下一些其他资源。

    • 修剪空白

    • 使用条件语句

    • 打印一系列列

    • 正则表达式与 AWK

    • 20 个 AWK 示例

    互联网是一个学习东西的好地方。对于非常高级的用户来说,有很多关于 AWK 基础知识的精彩教程。

    最后的想法

    希望本指南有助于更好地理解 AWK 基础知识。虽然可能需要一段时间,但就其所赋予的功能而言,掌握 AWK 是非常有益的。

    快乐计算!

    ©2015-2025 Norria support@norria.com