2 个版本
0.1.2 | 2024 年 5 月 8 日 |
---|---|
0.1.0 | 2023 年 11 月 15 日 |
#1531 在 命令行工具
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
- anew 使用最快的排序算法,因此请勿担心效率。
- 排序模式会自动去重,因此不需要同时使用
-s
和-r
。
用法 4:在添加新差异后对 things.txt
进行去重
❯ cat newthings.txt | ./anew things.txt -q -r
❯ cat things.txt
One
Zero
Two
Three
Five
Four
效率比较
我们将两个大小为 10MB 的文件 newoutput.txt
和 output.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.9–2.6MB
~47K SLoC