1 个稳定版本
1.0.0 | 2024 年 3 月 31 日 |
---|
#7 在 #checking
41KB
1K SLoC
schematch
声明性模式检查命令
安装
cargo install schematch
使用
Usage: schematch [OPTIONS] <SCHEMA> [FILE]
Arguments:
<SCHEMA> The schema to check against
[FILE] The file to check. If not provided, stdin will be used
Options:
-s, --schema-type <SCHEMA_TYPE> Schema type. schematch support tsv and json, If not provided tsv will be used [default: tsv] [possible values: tsv, json]
-h, --help Print help
-V, --version Print version
快速入门
您可以验证您数据的模式
例如,当您有 data.txt
1 [email protected] John_Doe
2 [email protected] Sherry_Berry
3 [email protected] Ram_Singh
然后您可以像这样验证您数据的模式
$ cat data.txt | schematch "id:integer email:string name:string"
1 [email protected] John_Doe
2 [email protected] Sherry_Berry
3 [email protected] Ram_Singh
$ echo $?
0
如果您的数据有效,那么 schematch
的退出码是 0,否则是 1。
Schematch 不会修改接收到的数据,并且以原始形式将其发送到 stdout。因此,schematch 可以通过 'pipe' 与其他命令灵活协作,并可以轻松集成到现有的 shell 脚本管道中。
例如)
$ cat data.txt |
schematch "id:integer email:string name:string" |
awk '{print $1, $3}' |
schematch "id:integer name:string" |
.
.
.
为什么?
Unix shell 小巧美观且高度可组合。然而,它们通常不太易读和理解。这部分是因为很难看到每个命令如何与数据交互。要完全理解 shell 脚本在做什么,您需要了解 cat
和 find
命令读取的文件的数据结构,以及 awk
和 sed
如何处理它们。
然而,shell 脚本只描述后者信息(即数据是如何处理的)。前者信息(即原始数据和处理后的数据的结构)始终在文件中,并且永远不会在 shell 脚本中以声明性方式描述。
Schematch 允许前者信息(即数据结构)包含在 ShellScript 管道中。
例如,要使用 shell 从 Apache 日志文件中输出每小时的访问次数,可能编写以下 shell 脚本
cat/var/log/apache2/access.log|awk'{print$4}' |cut-b2-15 |sort|uniq-c
这当然可以很好地工作,但很难理解每个命令的作用。
Schematch
可以改变这一点
cat /var/log/apache2/access.log |
schematch 'ip:string localuser:string remoteuser:string time:string
res:string status:number bite:number referer:string agent:string' |
awk '{print $4}' |
schematch 'time:string' |
tr ':/' ' ' |
schematch 'date:number month:string year:string h:number m:number s:number' |
awk '{printf "%s_%s\n", $1, $2}' |
schematch 'date_month:string' |
sort |
uniq -c
它以声明性方式描述了管道中数据的结构以及每个命令如何对数据进行语义处理。
支持的 Schema
- tsv
- json
Tsv
使用
$ cat data.txt
1 [email protected] true Jhon_Doe
2 [email protected] false Emily_Lua
3 [email protected] true _
$ cat data.txt | schematch "id:integer email:string is_active:boolean name:string|null" > /dev/null
$ echo $?
0
支持类型和值
类型 | 有效值 | 无效值 |
---|---|---|
整数 | 1 、449 、-4 等。 |
1.0 、x123 |
浮点数 | 1 、4.0 、-39 等。 |
xx 、yy |
字符串 | aaa 、bbb 、c 等。 |
字符串接受任何内容 |
布尔值 | true 、false |
除了有效字符以外的所有字符都是无效的 |
空值 | _ |
除了有效字符以外的所有字符都是无效的 |
Json
$ cat data.txt
{
"group": "Group1",
"members": [
{"id": "aaa", "name": "Jhon"},
{"id": "bbb", "name": "Mary"}
]
}
$ cat data.txt | schematch --schema-type json "{group: string, members: Array<{id: string, name: string}>}" > /dev/null
$ echo $?
0
支持的数据类型
- 空值
- 字符串
- 数字
- 布尔值
- 对象
依赖项
~1.7–2.7MB
~51K SLoC