在jq中将重复的输出字符串分组

时间:2018-10-19 21:53:59

标签: json bash csv group-by jq

我正在尝试将看起来像https://digitalcollections.ohsu.edu/api/items/11801的JSON转换为带有分号的多行分隔符的选择性制表符分隔格式。我可以选择所需的字段,并以制表符分隔的格式获取它们。

但是,我仍然无法获得多值字段,而使用分号分隔符将其连接到单个字段中,而又不会产生超级混乱。例如,

jq '.element_texts[] | (select(.element.name=="Title") | .text), (select(.element.name=="Subject") | .text)'

输出我需要的字段。但是我无法将与此返回的3个主题转换为我可以加入的3个项目的数组-我总是得到3个单独的字符串。我可以通过完成

jq '(.element_texts[] | (select(.element.name=="Title") | .text), (select(.element.name=="Date") | .text)), ([.element_texts[] | (select(.element.name=="Subject") | .text)] | join(";"))'

但是我觉得必须有一个更简单,更好的方法,但是我看不到它是什么

1 个答案:

答案 0 :(得分:0)

使用指示的输入,以下过滤器将产生输出,如下所示:

.element_texts
| [(.[]
   | ((select(.element.name=="Title"),
      (select(.element.name=="Date")))
   | .text)),
   (map(select(.element.name=="Subject") | .text) 
    | join(";") ) ]
| @tsv

输出

Esther Pohl Lovejoy, M.D.   1894    Lovejoy, Esther Clayson Pohl, M.D., 1869-1967\r\n;Physicians, Women;Portraits