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 文本处理

MIT 或 Apache-2.0

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 --releasecargo [+]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