8 个版本
0.2.4 | 2024年2月28日 |
---|---|
0.2.3 | 2023年12月5日 |
0.1.4 | 2023年11月15日 |
0.1.3 | 2023年10月23日 |
#358 in 命令行工具
24KB
180 行
Rust csvchk
分隔文本记录的垂直视图。
用法
使用 -h|--help
运行以读取用法
$ csvchk -h
Usage: csvchk [OPTIONS] [FILES]...
Arguments:
[FILES]... [default: -]
Options:
-s, --separator <SEPARATOR>
-l, --limit <LIMIT> [default: 1]
-n, --number
-N, --no-headers
-d, --dense
-c, --columns <COLUMNS>
-h, --help Print help
-V, --version Print version
默认输入为 STDIN
输入文件名的可选 "-" 表示 STDIN 是默认输入流
$ cat tests/inputs/books.csv | csvchk
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
$ csvchk - < tests/inputs/books.csv
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
默认限制为一条记录
默认情况下,程序将显示第一条记录
$ csvchk tests/inputs/books.csv
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
使用 -l|--limit
选项来指示更多记录
$ csvchk tests/inputs/books.csv --limit 2
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
// ****** Record 2 ******//
Author : Samuel Beckett
Year : 1952
Title : Waiting for Godot
如果您使用 0
,则将显示所有记录
$ csvchk tests/inputs/books.csv --limit 0
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
// ****** Record 2 ******//
Author : Samuel Beckett
Year : 1952
Title : Waiting for Godot
// ****** Record 3 ******//
Author : Jules Verne
Year : 1870
Title : 20,000 Leagues Under the Sea
列编号
-n|--number
选项将显示从 1 开始的列号,适合与 awk
、cut
或 cutr
进行字段选择。例如,如果我想提取出版年份
$ csvchk tests/inputs/books.tsv -n
// ****** Record 1 ******//
1 Author : Émile Zola
2 Year : 1865
3 Title : La Confession de Claude
$ cut -f 2 tests/inputs/books.tsv
Year
1865
1952
1870
无标题
一些文件没有标题
$ cat tests/inputs/nohdr.csv
a,b,c
d,e,f
g,h,i
-N|--no-headers
选项将为 "Field*" 提供名称
$ csvchk --no-headers tests/inputs/nohdr.csv
// ****** Record 1 ******//
Field1 : a
Field2 : b
Field3 : c
定义/覆盖列名
使用 -c|--columns
提供自己的列名,例如在无标题文件的情况下
$ csvchk -c 1,2,3 tests/inputs/nohdr.csv
// ****** Record 1 ******//
1 : d
2 : e
3 : f
即使文件有标题,也可以覆盖列名
$ csvchk -c 1,2,3 tests/inputs/books.tsv
// ****** Record 1 ******//
1 : Émile Zola
2 : 1865
3 : La Confession de Claude
请注意,--no-headers
会将第一行视为数据行
$ csvchk -c 1,2,3 -N tests/inputs/books.tsv -l 2
// ****** Record 1 ******//
1 : Author
2 : Year
3 : Title
// ****** Record 2 ******//
1 : Émile Zola
2 : 1865
3 : La Confession de Claude
检测记录分隔符
这是一个 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"
它假设逗号分隔
$ csvchk tests/inputs/books.csv
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
这是一个制表符分隔的文件
$ cat tests/inputs/books.tsv
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
它工作正常
$ csvchk tests/inputs/books.tsv
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
指示分隔符
此文件使用分号
$ cat tests/inputs/books.txt
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
所以使用 -s|--separator
来指示
$ csvchk -s \; tests/inputs/books.txt
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
多个文件
当与多个文件一起运行时,将插入标题。注意以下运行中为每个输入文件猜测记录分隔符
$ csvchk tests/inputs/nohdr.csv tests/inputs/movies1.csv \
> tests/inputs/movies2.csv tests/inputs/movies2.tsv tests/inputs/books.tsv
==> tests/inputs/nohdr.csv <==
// ****** Record 1 ******//
a : d
b : e
c : f
==> tests/inputs/movies1.csv <==
// ****** Record 1 ******//
title : The Blues Brothers
year : 1980
director : John Landis
==> tests/inputs/movies2.csv <==
// ****** Record 1 ******//
title : The Blues Brothers
year : 1980
director : John Landis
==> tests/inputs/movies2.tsv <==
// ****** Record 1 ******//
title : The Blues Brothers
year : 1980
director : John Landis
==> tests/inputs/books.tsv <==
// ****** Record 1 ******//
Author : Émile Zola
Year : 1865
Title : La Confession de Claude
过滤
使用-g|--grep
选项来查找匹配给定模式的文件
$ csvchk -g Hooper tests/inputs/movies2.csv
// ****** Record 2 ****** //
title : Les Misérables
year : 2012
director : Tom Hooper
默认情况下,使用区分大小写的匹配,所以搜索“hooper”将找不到任何结果。使用-i|--insensitive
选项来解决这个问题
$ csvchk -g hooper -i tests/inputs/movies2.csv
// ****** Record 2 ****** //
title : Les Misérables
year : 2012
director : Tom Hooper
您可以使用正则表达式,例如,使用-l 0
来查找后面跟着“l”或“r”的“b”,不区分大小写,以获取所有匹配项
$ csvchk --grep 'b[lr]' -i tests/inputs/movies2.csv -l 0`
// ****** Record 1 ****** //
title : The Blues Brothers
year : 1980
director : John Landis
// ****** Record 2 ****** //
title : Les Misérables
year : 2012
director : Tom Hooper
您也可以将正则表达式大写表示
$ csvchk --grep 'B[LR]' -i tests/inputs/movies2.csv -l 0`
// ****** Record 1 ****** //
title : The Blues Brothers
year : 1980
director : John Landis
// ****** Record 2 ****** //
title : Les Misérables
year : 2012
director : Tom Hooper
作者
Ken Youens-Clark [email protected]
依赖项
~27–43MB
~782K SLoC