首页 > 解决方案 > 如何将两个不同的jq语句的行编织在一起

问题描述

我有以下 jq 声明:

cat main.json | jq .hits.hits[] | jq -c '{"index":{"_index": ._index, "_type": ._type, "_id": ._id}}'

这给了我类似的东西:

{"index":{"_index":"main","_type":"default","_id":"64"}}
{"index":{"_index":"main","_type":"default","_id":"65"}}

还有另一个 jq 声明:

cat main.json | jq .hits.hits[] | jq -c '._source'

这给了我类似的东西:

{"mainContentOfPage":"hidden","informationType":"Product","url":"hidden","_id":"64"}
{"mainContentOfPage":"hidden","informationType":"Product","url":"hidden","_id":"65"}

现在我想组合这些语句,以便在连续的行上获得它们的结果,如下所示:

{"index":{"_index":"main","_type":"default","_id":"64"}}
{"mainContentOfPage":"hidden","informationType":"Product","url":"hidden","_id":"64"}  
{"index":{"_index":"main","_type":"default","_id":"65"}}
{"mainContentOfPage":"hidden","informationType":"Product","url":"hidden","_id":"65"}

这将允许我使用Elasticsearch 的 Bulk API对这些进行索引。

如何结合这两个语句来给我想要的结果?

标签: jsonunixjq

解决方案


使用逗号(另外,我已经简化了键值选择器以使用简写语法):

jq -c '.hits.hits[] | { index: { _index, _type, _id } }, ._source' main.json

推荐阅读