12 个版本
0.4.8 | 2023年3月21日 |
---|---|
0.4.6 | 2022年4月11日 |
0.4.5 | 2022年1月15日 |
0.4.4 | 2021年9月9日 |
0.3.0 | 2020年11月8日 |
#162 in 文本处理
1MB
28K SLoC
frawk
frawk 是一种用于编写处理文本数据的小型编程语言。从第一近似来看,它是 AWK 语言的实现;许多常见的 AWK 程序在传递给 frawk 时会产生等效的输出。如果您希望您的脚本能处理类似标准 AWK 字段的转义 CSV/TSV,或者希望您的脚本运行更快,您可能会对 frawk 感兴趣。
info 子目录包含有关 frawk 的更深入信息
- 概述:frawk 是什么,它如何与 AWK 区别。
- 类型:简要概述 frawk 对类型和类型推断的方法。
- 并行性:概述 frawk 的并行性支持。
- 基准:在处理大型 CSV 或 TSV 文件时,frawk 与其他工具相对性能的感观。
- 内建函数参考:frawk 实现的内建函数列表,包括与 AWK 相比时一些新的函数。
frawk 在 MIT 或 Apache 2.0 许可下双许可。
安装
注意:frawk 默认使用一些夜间仅有的 Rust 功能。要在不使用 unstable
功能的情况下构建,请参阅 此处。
您需要安装 Rust。如果您已经有一段时间没有更新 Rust,请运行 rustup update nightly
(或如果使用稳定版本构建,则运行 rustup update
)。如果您想使用 LLVM 后端,您需要在您的机器上安装 LLVM 12
- 有关某些基于 Debian 的 Linux 发行版的安装说明,请参阅 此网站。还可以参阅 此问题 的评论,以获取可用于在 Ubuntu 上构建二进制的 Docker 文件。
- 截至2020年9月,在Arch系统上使用
pacman -Sy llvm llvm-libs
和C编译器(例如clang
)就足够了。 - 在Mac OS上,使用
brew install llvm@12
或类似的命令似乎可行。
根据您的包管理器将这些库放置的位置,您可能需要在安装llvm@12时将LLVM_SYS_120_PREFIX
指向llvm库安装目录(例如,在Linux上为/usr/lib/llvm-12
,在Mac OS上为/usr/local/opt/llvm@12
)。
不使用LLVM构建
虽然推荐使用LLVM后端,但也可以仅使用基于Cranelift的JIT及其字节码解释器来构建frawk。为此,不要构建带有llvm_backend
功能的frawk。Cranelift后端对较小的脚本提供与LLVM相当的性能,但LLVM的优化有时可以比Cranelift提供显著的性能提升(请参阅性能基准文档以了解一些示例)。
使用稳定版构建
frawk默认要求使用夜间编译器。要使用稳定版编译frawk,请在没有unstable
功能的情况下进行编译。使用rustup default nightly
或运行夜间编译器发布的其他方法来构建frawk。
构建二进制文件
具备这些先决条件后,克隆此存储库并运行cargo build --release
或cargo [+]nightly install ---path <frawk repo path>
将生成一个二进制文件,您可以选择将其添加到PATH
中。
$ cd <frawk repo path>
# With LLVM
$ cargo +nightly install --path .
# Without LLVM, but with other recommended defaults
$ cargo +nightly install --path . --no-default-features --features use_jemalloc,allow_avx2,unstable
frawk现在在crates.io上,因此使用带有所需功能的cargo +nightly install frawk
也应该可行。
尽管frawk中没有故意的Unix特性,但我还没有在Windows上测试它。frawk似乎可以在Windows上构建,默认禁用了功能;有关更多信息,请参阅此问题的评论。
错误和功能请求
frawk存在错误和许多粗糙的边缘。如果您在frawk中发现错误,提交一个说明如何重现错误的issue将非常有帮助。对于修复没有保证响应时间或延迟。没有人全职从事frawk。同样适用于功能请求。
依赖项
~13–24MB
~350K SLoC