1 个不稳定版本
0.1.0 | 2024年3月4日 |
---|
在 命令行工具 中排名第 1893
24KB
356 代码行
cutr
Rust 版本的 cut
,它尊重分隔符
概述
Usage: cutr [OPTIONS]
<--fields <FIELDS>|--bytes <BYTES>|--chars <CHARS>> [FILES]...
Arguments:
[FILES]... Input file(s) [default: -]
Options:
-d, --delimiter <DELIMITER> Field delimiter [default: "\t"]
-o, --output-delimiter <OUTPUT_DELIMITER> Field delimiter
-f, --fields <FIELDS> Selected fields
-b, --bytes <BYTES> Selected bytes
-c, --chars <CHARS> Selected chars
-h, --help Print help
-V, --version Print version
原理
标准的 BSD/GNU 版本的 cut
不尊重转义的字段分隔符。例如,给定一个逗号分隔值 (CSV) 文件如下
$ cat tests/inputs/books.csv
Author,Year,Title
Émile Zola,1865,La Confession de Claude
Samuel Beckett,1952,Waiting for Godot
Jules Verne,1870,"20,000 Leagues Under the Sea"
在 20,000 Leagues Under the Sea 中的逗号被视为字段分隔符,因此该列被截断
$ cut -d , -f 3 tests/inputs/books.csv
Title
La Confession de Claude
Waiting for Godot
"20
这个 Rust 版本尊重转义的分隔符
$ cutr -d , -f 3 tests/inputs/books.csv
Title
La Confession de Claude
Waiting for Godot
"20,000 Leagues Under the Sea"
此外,cut
允许随机选择字段,但不尊重用户指定的顺序。例如,在下面的命令中,我期望 cut
返回按 Year 和然后 Author 排序的列,但该工具按文件顺序返回它们
$ cut -d , -f 2,1 tests/inputs/books.csv
Author,Year
Émile Zola,1865
Samuel Beckett,1952
Jules Verne,1870
这个 Rust 版本将按请求的顺序返回选择
$ cutr -d , -f 2,1 tests/inputs/books.csv
Year,Author
1865,Émile Zola
1952,Samuel Beckett
1870,Jules Verne
在解析分隔符文件时,输出字段分隔符默认为输入分隔符,但您可以指定一个不同的值。例如,输入文件可能是 CSV,但我想以制表符字符作为输出分隔符
$cutr -d , -o $'\t' -f 2,1 tests/inputs/books.csv
Year Author
1865 Émile Zola
1952 Samuel Beckett
1870 Jules Verne
待办事项
- 原始的
cut
工具允许进行开放式选择,例如-3
表示第一个到第三个字段或5-
表示第五个字段到记录的末尾。这个版本只允许封闭范围,所以我希望添加这个功能。
作者
Ken Youens-Clark [email protected]
依赖项
~26–43MB
~783K SLoC