微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jq:如何在没有重复代码的情况下在其他领域使用相同的搜索?

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?