我需要将声纳分析历史记录的结果分为单个文件。假设下面有一个起始输入,
{
"paging": {
"pageIndex": 1,
"pageSize": 100,
"total": 3
},
"measures": [
{
"metric": "coverage",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "100.0"
},
{
"date": "2018-11-21T12:22:39+0000",
"value": "100.0"
},
{
"date": "2018-11-21T13:09:02+0000",
"value": "100.0"
}
]
},
{
"metric": "bugs",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
},
{
"date": "2018-11-21T12:22:39+0000",
"value": "0"
},
{
"date": "2018-11-21T13:09:02+0000",
"value": "0"
}
]
},
{
"metric": "vulnerabilities",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
},
{
"date": "2018-11-21T12:22:39+0000",
"value": "0"
},
{
"date": "2018-11-21T13:09:02+0000",
"value": "0"
}
]
}
]
}
如何使用jq清除结果,以便仅保留每个元素的历史记录数组条目?所需的输出是这样的(在“ 2018-11-18T12:37:08 + 0000”上完成分析的输出-20181118123808.json):
{
"paging": {
"pageIndex": 1,
"pageSize": 100,
"total": 3
},
"measures": [
{
"metric": "coverage",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "100.0"
}
]
},
{
"metric": "bugs",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
}
]
},
{
"metric": "vulnerabilities",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
}
]
}
]
}
我迷失了如何只对子元素进行操作而又不影响父结构的情况。JSON文件的命名将通过jq实用程序在外部进行处理。提供的样本数据将分为3个文件。其他一些输入可以具有可变数量的条目,有些则可以多达10000个。谢谢。
这是awk
用于写入不同文件的解决方案。该解决方案假定每个度量的日期相同且顺序相同,但是对不同日期的数量或不同度量的数量没有限制。
jq -c 'range(0; .measures[0].history|length) as $i
| (.measures[0].history[$i].date|gsub("[^0-9]";"")), # basis of filename
reduce range(0; .measures|length) as $j (.;
.measures[$j].history |= [.[$i]])' input.json |
awk -F\\t 'fn {print >> fn; fn="";next}{fn="output-" $1 ".json"}'
awk
这里的选择只是为了方便。
这种方法的缺点是,如果要对每个文件进行格式化,则每个文件都需要额外运行一次漂亮打印机(例如jq)。因此,如果要求每个文件中的输出整洁,则可以为每个日期运行一次jq,从而省去了后处理(awk
)步骤的需要。
如果措施的日期不同步,那么仍然可以使用与上述相同的方法,但是当然,日期和相应措施的收集必须以不同的方式进行。
上面的jq调用产生的前两行如下:
"201811181237080000"
{"paging":{"pageIndex":1,"pageSize":100,"total":3},"measures":[{"metric":"coverage","history":[{"date":"2018-11-18T12:37:08+0000","value":"100.0"}]},{"metric":"bugs","history":[{"date":"2018-11-18T12:37:08+0000","value":"0"}]},{"metric":"vulnerabilities","history":[{"date":"2018-11-18T12:37:08+0000","value":"0"}]}]}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句