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

jq : how can i use the same search in other field without duplicate code?

我有这个 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 | select(.answers != null) | .answers | map(.answer) | del(.[] | nulls)

如何重用 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)
'