我正在ubuntu上使用MediaInfo命令行v18.08来解析目录中的多个文件并输出JSON,例如:self::
为每个文件输出以下JSON(略微精简)
mediainfo * --output=JSON
但是我只想要该JSON的子集,所以我使用了jq-1.5-1
{
"media": {
"@ref": "openingmusic.mp3",
"track": [
{
"@type": "General",
"Duration": "17.789",
"Encoded_Library": "LAME3.98r"
},
{
"@type": "Audio",
"Format": "MPEG Audio",
"Encoded_Library_Settings": "-m s -V 2 -q 3 -lowpass 18.6 --vbr-old -b 32"
}
]
}
}
太好了,除了元素之间没有mediainfo *.mp3 --output=JSON | jq '. | {duration: .media.track[0].Duration, pubDate: .media.track[0].File_Modified_Date_Local, url: .media."@ref"}'
之外,整个批次都没有用[]包裹,当然,尽管我可以捏造这部分,但是如果我加入输出,则会得到逗号结尾
请问正确的jq方式是什么?
答案 0 :(得分:1)
您可以使用--slurp
选项:
- -slurp / -s:
不必为输入中的每个JSON对象运行筛选器,而是将整个输入流读入一个大型数组,然后仅运行筛选器一次。
与map
结合使用以对数组的每个元素运行过滤器:jq -s 'map({duration: .media.track[0].Duration, pubDate: .media.track[0].File_Modified_Date_Local, url: .media."@ref"})'
然后输出仍然是数组。