本地文件处理工作流整理,待归档到一个合适的目录
通过 dsq join 文件条件查找
安装工具
brew install dsq
, dsq githubbrew install jq
, jq github
// 文件 a.json
[
{"type": "tool", "id": "1"},
{"type": "tool", "id": "2"},
{"type": "tool", "id": "3"},
{"type": "book", "id": "1"},
{"type": "none", "id": "1"}
]
// 文件 b.json
[
{"author": "nickchen", "type":"tool", "tag":[1,2,3]},
{"author": "whoru", "type":"none"},
{"author": "teacher", "type":"book"}
]
需求打印出 author、type、id ,且 id=1 的组合
- 因为 dsq 没法解析内嵌列表,所有 b.json 中的 tag 字段必须要被删除
- 需要 dsq join a.json 和 b.json,且判断 id = 1
- 打印结果确认是否符合要求
- 输出一个格式化的 json array
开始执行:
- 清理 b.json 中的 tag 字段
- jq 的最外侧
[]
是列表构造器,会生成一份列表 - jq 的
.[]
代表迭代器,迭代当前这个 json array - jq 的
|
是 pipe 管道,将数据流转到下一个程序 - jq 的
del()
是内建函数,可以删除某个字段
- jq 的最外侧
➜ cat b.json | jq '[.[]|del(.tag)]' > c.json
or
➜ cat b.json | jq '[.[]|{author:.author,type:.type}]' > c.json
- dsq join 查询 & 打印结果
- dsq 的
--pretty
可以输出表格结果 - dsq 输入多个文件,可以按照进行 join 操作,表名即文件顺序
- dsq 的
➜ dsq --pretty a.json c.json "select {0}.id, {1}.type, {1}.author from {0} join {1} on {0}.type = {1}.type where {0}.id = 1"
+----------+----+------+
| author | id | type |
+----------+----+------+
| nickchen | 1 | tool |
| teacher | 1 | book |
| whoru | 1 | none |
+----------+----+------+
- 输出一个格式化的 json array
➜ dsq a.json c.json "select {0}.id, {1}.type, {1}.author from {0} join {1} on {0}.type = {1}.type where {0}.id = 1" | jq .
[
{
"id": "1",
"type": "tool",
"author": "nickchen"
},
{
"type": "book",
"author": "teacher",
"id": "1"
},
{
"id": "1",
"type": "none",
"author": "whoru"
}
]
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]