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 在 命令行工具
457 每月下载次数
1.5MB
38K SLoC
zawk: AWK + stdlib + Rust
zawk 是一种用于编写处理文本数据的简短程序的小型编程语言。从第一近似来看,它是 AWK 语言的实现;许多常见的 AWK 程序在通过 zawk 处理时会产生等效的输出。
如果您想使脚本处理像标准 AWK 字段一样的转义 CSV/TSV,或者如果您想使脚本执行得更快,或者如果您想使用标准 AWK 库使生活更轻松,那么您可能会对 zawk 感兴趣。
功能
- frawk 支持的 CSV/TSV
- 高性能
- 与 gawk 兼容
- 标准库:文本、数学、日期时间、加密、解析、编码/解码、ID、KV、SQLite/MySQL、Redis/NATS 等。
- 国际化支持:
length("你好Hello") # 7
,substr("你好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 --release
或cargo [+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