13 个版本

新版本 0.5.12 2024 年 8 月 19 日
0.5.11 2024 年 8 月 11 日
0.5.10 2024 年 7 月 29 日
0.5.8 2024 年 6 月 2 日
0.5.2 2024 年 3 月 18 日

#19命令行工具

Download history 133/week @ 2024-05-03 40/week @ 2024-05-10 4/week @ 2024-05-17 149/week @ 2024-05-31 17/week @ 2024-06-07 3/week @ 2024-06-14 3/week @ 2024-06-28 121/week @ 2024-07-05 17/week @ 2024-07-12 213/week @ 2024-07-26 21/week @ 2024-08-02 114/week @ 2024-08-09 109/week @ 2024-08-16

457 每月下载次数

MIT 或 Apache-2.0

1.5MB
38K SLoC

zawk: AWK + stdlib + Rust

zawk 是一种用于编写处理文本数据的简短程序的小型编程语言。从第一近似来看,它是 AWK 语言的实现;许多常见的 AWK 程序在通过 zawk 处理时会产生等效的输出。

如果您想使脚本处理像标准 AWK 字段一样的转义 CSV/TSV,或者如果您想使脚本执行得更快,或者如果您想使用标准 AWK 库使生活更轻松,那么您可能会对 zawk 感兴趣。

AWK Stdlib

功能

  • frawk 支持的 CSV/TSV
  • 高性能
  • 与 gawk 兼容
  • 标准库:文本、数学、日期时间、加密、解析、编码/解码、ID、KV、SQLite/MySQL、Redis/NATS 等。
  • 国际化支持:length("你好Hello") # 7substr("你好Hello", 1, 2) # 你好
  • 从 URL 加载 awk 脚本
  • awk 文件帮助支持

info 子目录中包含关于 zawk 的更深入信息

  • 概览:frawk 是什么,它与 Awk 有何不同。
  • 类型:简要说明 frawk 对类型和类型推断的方法。
  • 并行性:frawk 并行性支持的概述。
  • 基准测试:frawk 与其他工具在处理大型 CSV 或 TSV 文件时的相对性能。
  • 标准库:由zawk提供的一个标准库,包含与Awk相比的新颖功能。
  • 常见问题解答:关于zawk的常见问题解答。

zawk/frawk采用MIT或Apache 2.0双许可协议。

安装

Mac系统使用Homebrew

$ brew install --no-quarantine linux-china/tap/zawk
$ sudo xattr -r -d com.apple.quarantine $(readlink -f $(brew --prefix zawk))/bin/zawk

或使用cargo安装

$ cargo install zawk

注意:zawk使用了某些仅限nightly版本的Rust功能。若要在稳定版本上构建,请不使用unstable功能(请参阅此处)。

您需要安装Rust。如果您有一段时间没有更新rust,请运行rustup update nightly(或如果使用稳定版本构建,请运行rustup update)。如果您想使用LLVM后端,您需要在您的机器上安装LLVM 15。

  • 有关某些基于debian的Linux发行版的安装说明,请参阅此网站。有关用于在Ubuntu上构建二进制文件的docker文件,请参阅此问题的评论。
  • 截至2022年9月,在Arch系统上使用pacman -Sy llvm llvm-libs和C编译器(例如clang)就足够了。
  • 在macOS上,brew install llvm@15或类似命令似乎可以正常工作。

根据您的包管理器放置这些库的位置,您可能需要将LLVM_SYS_150_PREFIX指向LLVM库安装目录(例如,Linux上的/usr/lib/llvm-15或macOS上的/opt/homebrew/opt/llvm@15,当通过Homebrew安装LLVM 15时)。

注意:与Cranelift相比,使用LLVM的二进制文件更大(约32M vs 8.5M)。

不使用LLVM构建

虽然推荐使用LLVM后端,但您也可以仅使用基于Cranelift的JIT和其字节码解释器来构建frawk。为此,请不使用llvm_backend功能进行构建。对于较小的脚本,Cranelift后端提供的性能与LLVM相当,但有时LLVM的优化可以比Cranelift带来显著的性能提升(请参阅性能文档中的示例)。

使用稳定版构建

frawk默认要求使用nightly编译器。若要使用稳定版编译frawk,请不使用unstable功能。否则,需要使用rustup default nightly或其他方法来运行nightly编译器版本以构建frawk。

构建二进制文件

有了这些先决条件,克隆此仓库并执行cargo build --releasecargo [+nightly] install --path <zawk仓库路径>将生成您可以选择添加到PATH的二进制文件。

$ cd <zawk repo path>
# Without LLVM
$ cargo +nightly install --path .
# With LLVM, but with other recommended defaults
$ cargo +nightly install --path . --no-default-features --features use_jemalloc,llvm_backend,allow_avx2,unstable

zawk现在可在crates.io上找到,因此使用带有所需功能的cargo install zawk也应该可以工作。

错误和功能请求

frawk 存在缺陷,并且有很多粗糙的地方。如果您在 frawk 中发现了一个缺陷,提交一个包含错误复现方法的 issue 会非常有帮助。对于修复的响应时间和延迟没有保证。没有人全职工作在 frawk 上。同样的政策也适用于功能请求。

致谢

感谢 Eli Rosenthal 的 frawk。zawk 基于 frawk。没有 frawk,就没有 zawk。

依赖项

~110–150MB
~3M SLoC