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)
'
我有这个 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)
'