json - jq:如何在其他字段中使用相同的搜索而不重复代码?
问题描述
我有这个 jq 命令:
cat myfile | jq -c '{
domain: .name,
results: .data | select(.answers != null) | .answers | map(.answer) | del(.[] | nulls) ,
includes: .data | select(.answers != null) | .answers | map(.answer) | del(.[] | nulls) | map(match("rearch:(.*?)?[ \"]"; "ig").captures[0].string) | unique
}'
得到这个结果:
{"domain":"blabla.com","results":["dorem rearch:blble.k iyh"],"includes":["blble.k"]}
{"domain":"bla.com","results":["koa rearch:ble.m","kl rearch:be.c lk"],"includes":["ble.m","be.c"]}
我的问题DRY
是:我的命令有什么办法吗?
我的意思是如何在不重复部分的情况下获得相同的结果:
.数据 | 选择(.answers != null) | .答案 | 地图(.answer) | 德尔(.[] | 空值)
我怎样才能重用results
feild 的结果?
我有一个非常大的文件要处理,所以我不想浪费时间和资源。
解决方案
有一个变量
< myfile.json jq -c '
(.data | select(.answers != null) | .answers | map(.answer) | del(.[] | nulls)) as $data
| {
domain: .name,
results: $data,
includes: $data | map(match("rearch:(.*?)?[ \"]"; "ig").captures[0].string) | unique
}
'
没有变量
< myfile.json jq -c '
{ domain: .name,
results: (.data | select(.answers != null) | .answers | map(.answer) | del(.[] | nulls)) }
| .includes = (.results | map(match("rearch:(.*?)?[ \"]"; "ig").captures[0].string) | unique)
'
推荐阅读
- swift - Swift 从 AppDelegate 调用 ViewController 函数
- python - docx 标头未显示图像
- flutter - 创建转到下一页的按钮时,我需要初始化它吗?
- javascript - 钱显示不会更新
- git - 使用这个命令“git push origin master -f”会不会有什么问题?
- android - 尝试在 React Native 上播放音频时出错
- javascript - 如何在确认时触发 DataTable 行?使用 PrimeVue 和 Vue 3
- immutable.js - Immutable.JS 的 deleteIn 的时间复杂度是多少?
- vb.net - DataGridView 实时搜索数据
- c++ - static_cast vs reinterpret_cast,细微的差异?