我一直在寻找jq
中可能不存在的非常具体的功能。如果你知道它不在那里,我会很感激,并且有一些建议来解决这个问题。
我正在处理公开dataset。我已设法将数据缩减为以下行格式:
[field1,field2,field3,[author1,...,authorN],[author_type1,...,author_typeN]]
我用来获取此格式的bash命令如下:
find aps-dataset-metadata_subdir_path/ -name '*.json' | \
xargs cat | \
jq --compact-output \
'select(.authors != null) | [.identifiers.doi, .date, .journal.id, [.authors[].name], [.authors[].type]]'
请注意,authorN
和author_typeN
在原始数据中位于同一对象中(即具有相同的父对象)。
我一直在寻找一种方法来从以下每一行产生以下内容:
[field1,field2,field3,author1,author_type1]
[field1,field2,field3,author2,author_type2]
...
...
[field1,field2,field3,authorN,author_typeN]
jq
中的展平功能似乎是平坦的,没有生成新的列表。如果你们中的一些人知道PigLatin,我想要的只是PigLatin built-in Flatten运算符。
同样,我知道它可能没有在jq
中实现。在这种情况下,我可能会以Python
或者您在答案中建议的任何其他令人敬畏的方式对输出进行后期处理。
非常感谢!
答案 0 :(得分:2)
不要在单独的表达式中单独通过作者,而是需要通过作者一次。您可以将结果放在变量中,稍后再访问它们。
#!/bin/bash
答案 1 :(得分:1)
Jeff建议使用一步法是有道理的,但是如果必须将数组[field1,field2,field3,[author1,...,authorN],[author_type1,...,author_typeN]]
转换为[field1,field2,field3,authorI,author_typeI]
形式的数组流,那么合适的jq过滤器将是:
.[0:2] + ([.[3], .[4]] | transpose[])