AWK - Arch Linux 中文维基

跳转到内容

# AWK

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 AWK，最近一次同步于 2025-03-05，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

AWK 是一种用于文本处理的小型编程语言。其名称源于作者的姓氏：Alfred Aho、Peter Weinberger 和 Brian Kernighan。该语言已经标准化，在类 Unix 系统上广泛使用。

## 安装

在 Arch 上，awk(1p) 命令由 gawk包 提供。gawk包 是默认安装，支持本地 Unicode，并具有大量额外功能。

注意：gawk包旨在通过动态加载所谓的扩展，在运行时获得额外的语言功能——捆绑在软件发行版中的扩展是开箱即用的，但单独维护的 gawkextlibAUR-* 插件则需要手动安装。

### 替代方案

与许多其他核心工具一样，有几种或多或少符合要求的实现可供使用：

- BusyBox — BusyBox 实现的性能不是很好，但占用空间较小，适合内存紧张的环境。

  https://git.busybox.net/busybox/tree/editors/awk.c || busybox包

- GoAWK — 用 Go 语言实现的 AWK

  https://github.com/benhoyt/goawk || goawkAUR

- nawk — AWK 编程语言中描述的"新" AWK，又名 BWK AWK 或 One-True-AWK，现由 Arnold Robbins 和 B. W. Kernighan 共同维护，支持 UTF-8 和 csv。

  https://awk.dev/ || nawk包

- mawk — 性能相当出色的 AWK 实现。

  https://invisible-island.net/mawk/ || mawkAUR

## 疑难解答

### 通过 `-v` 选项为 `ARGC` 变量赋值不会在运行时保留

尽管没有文档说明，[1]但许多实现在处理完命令行指定的 `-v` 选项的变量赋值后，似乎会在内部重置 `ARGC` 变量。因此，要在运行时（例如 `BEGIN` 代码块）获得 `ARGC` 变量的预期值，需要直接在代码块中设置该变量：

    BEGIN {
      ARGC=1;
      ...
    }

注意：即将更新的 POSIX 专门记录了这个问题。

## 参见

- nawk(1): nawk包的参考卡式手册页面
- Gawk: Effective AWK ProgrammingGNU 文档

：gawk(1) 的综合教程和典型参考文献

- Alpine Linux's community wiki article on AWK: 有一些关于 BusyBox 和其他 AWK 实现差异的说明
- AWK tech notes：语言的缺陷以及与其他现代编程语言相比在设计上的差异
- Idiomatic AWK：AWK 程序可以多么简洁

分类：​

- 编程语言
- 命令

AWK
添加话题