#deduplication #file-line #security #web

bin+lib anew

用于向文件添加新行,跳过重复项并使用 Rust 编写的工具!

2 个版本

0.1.2 2024 年 5 月 8 日
0.1.0 2023 年 11 月 15 日

#1531命令行工具

MIT 许可证

16KB
258 行(不包括注释)

anew

用于向 Rust 编写的文件添加新行的工具。

该工具有助于将来自 stdin 的行追加到文件中,但前提是这些行尚未出现在文件中。还会将新行输出到 stdout,使其类似于一个具有去重功能的 tee -a

安装

通过 cargo install

cargo install anew

手动安装

git clone https://github.com/zer0yu/anew
cd anew
cargo build

或者您可以从 发行版 下载二进制文件

用法

❯ anew --help
A tool for adding new lines to files, skipping duplicates

Usage: anew [OPTIONS] <FILEPATH>

Arguments:
  <FILEPATH>  Destination file

Options:
  -q, --quiet-mode  Do not output new lines to stdout
  -s, --sort        Sort lines (natsort)
  -t, --trim        Trim whitespaces
  -r, --rewrite     Rewrite existing destination file to remove duplicates
  -d, --dry-run     Do not write to file, only output what would be written
  -h, --help        Print help
  -V, --version     Print version

用法示例

在此,一个名为 things.txt 的文件包含一个数字列表。 newthings.txt 包含第二个数字列表,其中一些数字出现在 things.txt 中,而另一些则没有。 anew 用于将后者追加到 things.txt

用法 1:向 things.txt 添加差异

❯ cat things.txt
One
Zero
Two
One

❯ cat newthings.txt
Three
One
Five
Two
Four

❯ cat newthings.txt | anew things.txt
Three
Five
Four

❯ cat things.txt
One
Zero
Two
One
Three
Five
Four

用法 2:禁用终端输出

❯ cat newthings.txt | anew things.txt -q
Three
Five
Four

用法 3:在添加新差异后对 things.txt 中的内容进行排序

❯ cat newthings.txt | ./anew things.txt -q -s

❯ cat things.txt
Five
Four
One
Three
Two
Zero

PS

  1. anew 使用最快的排序算法,因此请勿担心效率。
  2. 排序模式会自动去重,因此不需要同时使用 -s-r

用法 4:在添加新差异后对 things.txt 进行去重

❯ cat newthings.txt | ./anew things.txt -q -r

❯ cat things.txt
One
Zero
Two
Three
Five
Four

效率比较

我们将两个大小为 10MB 的文件 newoutput.txtoutput.txt 作为程序的输入,以比较 tomnomnom 的 Go 实现、rwese 的 Rust 实现和本项目 Rust 实现之间的速度差异。

本项目

❯ time cat newoutput.txt | ./anew output.txt -q
cat newoutput.txt  0.00s user 0.02s system 1% cpu 1.398 total
./anew output.txt -q  1.46s user 0.22s system 97% cpu 1.717 total

由 rwese 实现的 anew

❯ time cat newoutput.txt | ./anew_rwese output.txt -q
cat newoutput.txt  0.00s user 0.02s system 0% cpu 2:28.38 total
./anew output.txt -q  6.95s user 101.08s system 72% cpu 2:29.49 total

由 tomnomnom 实现的 anew

❯ time cat newoutput.txt | ./anew_go -q output.txt
cat newoutput.txt  0.00s user 0.02s system 0% cpu 4.797 total
./anew_go -q output.txt  2.11s user 3.14s system 108% cpu 4.838 total

如上图所示,该项目已实现最高效!

参考

  1. anew@tomnomnom
  2. anew@rwese

依赖项

~1.9–2.6MB
~47K SLoC