csv jq从同一查询中获取多个字段

krcsximq  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(155)

我有一个这种类型的json:

{
  "_index": "indexeer",
  "_type": "_doc",
  "_id": "3233233233",
  "_score": 1,
  "_source": {
    "Bibtex": {
      "Article": {
        "AuthorList": [
          {
            "Affiliation": {
              "Affiliation": "Title content, Hematology and Hepatology Honorary Fellow, Honorary Member, American  Society. xxxyyy@hotmail.com."
            }
          }
        ]
      }
    }
  }
}

我使用jq得到Affiliation,如下所示:

jq -r '._source.Bibtex.Article.AuthorList[]? | .Affiliation.Affiliation | .[0:rindex(" Electronic address:")]' results.json

它工作得很好,给了我所需要的联系。
但是,我现在还需要id字段,并生成如下所示的csv:

"3233233233", "Title content, Hematology and Hepatology Honorary Fellow, Honorary Member, American  Society"

我可以单独获得ID,很容易,如下所示:

jq -r '._id' results.json

但是,如何合并这两个查询以生成包含idaffiliation的单个输出呢?
实际上,我希望将这两个查询组合起来。

2nbm6dog

2nbm6dog1#

使用._id as $idid保存为变量,然后可以在任何需要的地方使用$id

._id as $id | ._source.Bibtex.Article.AuthorList[].Affiliation.Affiliation | [ $id, .[0:rindex(" Electronic address:")] ] | @csv

输出:

"3233233233","Title content, Hematology and Hepatology Honorary Fellow, Honorary Member, American  Society. xxxyyy@hotmail.com."
i86rm4rw

i86rm4rw2#

使用[]从两个元素构造一个数组,并使用@csv转换为CSV:

jq -r '[
  ._id,
  ._source.Bibtex.Article.AuthorList[]?.Affiliation.Affiliation[:rindex(" Electronic address:")]
] | @csv'

输出:

"3233233233","Title content, Hematology and Hepatology Honorary Fellow, Honorary Member, American  Society. xxxyyy@hotmail.com."

多个作者将作为列添加到CSV中。
jq允许你把多个数组连接成一个数组,这是毫无价值的,连接流产生笛卡尔积,例如[1]+[2]产生[1,2][1]+([2],[3])产生[1,2][1,3](一个包含两个数组的流),你可以利用这个事实产生多个输出行,而不必先在变量中捕获id:

[._id]
+ (._source.Bibtex.Article.AuthorList[]? | [ .Affiliation.Affiliation[0:rindex(" Electronic address:")] ])
| @csv

相关问题