开始使用 awk 命令

awk 是一种强大的数据处理编程语言,几乎内置在每个 *nix 系统中。 它表面上看起来像是一种通用编程语言,但它的构建是为了接受输入并根据该输入运行操作。 如果您需要根据某些条件处理文本,awk 几乎总是比 C 等通用语言更快地完成工作。它也是解释型的,因此您可以避免编译语言的冗长编译和调试过程。

额外有趣的事实:这个程序的奇怪名字是它的程序员名字的缩写:Alfred 一种哦,彼得 W艾因伯格和布赖恩 ķ厄尼根

awk 的基本语法

在命令行上调用时,awk 遵循以下基本模式:

只要模式在指定的文件中匹配,awk 就会执行该操作。 如果不指定文件,awk 将在标准输出上运行。 在匹配模式时,awk 可以采用正则表达式以及编程输入。 让我们考虑这个基本的 example 以下:

这个单行程序将打印文件“电子邮件”中包含字符的每一行 com. 在 awk $0 指当前行,这也是默认行为。 该行可以在没有的情况下编写 $0, 它的功能也是一样的。

印刷领域

因为 awk 可以识别和解析字段分隔符,所以它对于打印出特定的列或行数据很有用。 我们将为此使用“/etc/passwd”文件 example.

awk-command-getting-started-2

这个单行程序做了一些事情。 国旗 -F 表示下一个字符 (: 在这 example) 应被解释为字段分隔符。 awk 他们打印第一个字段,由 $1.

我们还可以通过顺序指定字段来一次打印多个字段:

它将产生如下所示的输出。

awk-command-getting-started-4

这将打印第四个和第五个字段 passwd 文件之间有空格。 请注意,空格在双引号之间。 这将它指定为打印命令中的文字字符,因此它按书面形式打印。 我们还可以添加更复杂的文字来清理我们的输出:

awk-command-getting-started-5

这将打印带有标签的输出以进行识别。 我们可以使用插入符号 (>) 将所有这些输出到一个新文件中。

我们可以结合我们目前所知道的来广泛地处理数据。 为了 example,我们可以使用正则表达式打印包含有效美国电话号码的文档中的所有行。

扩展 awk 命令的匹配能力

awk 还可以使用各种操作数来处理信息。 这包括标准操作数,如 ==, <, >, <=, >=, 和 !=,以及特定于 awk 的操作数 ~!~, 分别表示“匹配”和“不匹配”。 在将正则表达式与布尔逻辑以及更标准的编程短语进行比较时,会使用这些操作数。

awk 命令示例

打印文件“data”中所有长度超过 80 个字符的行。 请注意缺少打印语句:在没有指定操作的情况下,只要模式匹配,awk 就会打印整行。

打印第一个字段等于字符串“user”的所有行。 没有 -F 标志,awk 将使用空格作为默认字段分隔符。 另外,请注意未指定 awk 和文件。 这用于单独文件中的脚本,如下所述。

每当第五个字段与正则表达式匹配时,打印第三个字段 /root/.

当字段 5 不匹配时 /root/,打印字段三。 这使用了类 C if 语句,它也与 awk 兼容。 这种格式为熟悉通用语言的程序员提供了更大的灵活性。

将脚本保存在文件中

awk 脚本也可以保存在允许您保存更复杂程序的文件中:

使用时 -f flag,awk在指定文件路径下运行脚本,即 program.awk. 该程序中的命令将处理文件“数据”。

动作也可以在程序之前和之后运行,使用 BEGINEND

正如你在上面看到的, # 符号开始一个注释,一直持续到行尾。

结论

本指南仅涉及 awk 的最基本元素。 除此之外,还有更多需要构建和探索的东西。 检查 awk 的 GNU 文档 或者 awk 编程语言,以及程序开发者编写的awk教科书。

订阅我们的新闻!

我们的最新教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策并且欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅