如何解决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
我的命令?
我的意思是如何在没有重复部分的情况下获得相同的结果:
.data |选择(.answers != null) | .answers |地图(.answer) |德尔(.[] | 空值)
如何重用 results
场的结果?
我有一个非常大的文件要处理,所以我不想浪费时间和资源。
解决方法
带有变量
< 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)
'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。