我有一个包含 json 行的文件,需要根据每个 json 的抖动“alert.status”值的序列来验证其有效性。
有效 json 行的示例:
{"id":123,"code":"foo","severity":"Critical","severityCode":1, "property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
{"id":456,"code":"bar","severity":"High","severityCode":2,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
{"id":123,"code":"foo","severity":"Critical","severityCode":1,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"Off"}}
{"id":456,"code":"bar","severity":"High","severityCode":2,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"Off"}}
{"id":123,"code":"foo","severity":"Critical","severityCode":1,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
{"id":456,"code":"bar","severity":"High","severityCode":2,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
上面的文件是有效的,因为重复的 json(第 1,5 行和第 2,6 行)的状态在“on”、“off”、“on”等之间变化。
无效 json 行的示例:
{"id":123,"code":"foo","severity":"Critical","severityCode":1, "property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
{"id":456,"code":"bar","severity":"High","severityCode":2,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
{"id":123,"code":"foo","severity":"Critical","severityCode":1,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"On"}}
{"id":456,"code":"bar","severity":"High","severityCode":2,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"Off"}}
{"id":123,"code":"foo","severity":"Critical","severityCode":1,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"Off"}}
{"id":456,"code":"bar","severity":"High","severityCode":2,"property":{ "priority":"top", "owner":"dev"}, "alert":{"mgmt":"yes", "status":"Off"}}
上面的内容是无效的,因为第 1 行和第 3 行中的 json 是重复的,其“状态”值保持不变,而不会在打开或关闭时抖动。
我尝试使用 jq 将 json 行读入 json 数组
jq --slurp 'map(select(. >= 2))' jsonfile > jsonarray
但由于每行中的顺序很重要,我认为我不能使用 group_by 来查找重复项(group_by 的结果已排序)。
我正在考虑在每个 json 中插入一个带有增量编号的新键,因此在使用 group_by 之后,我们可以根据这个新键对结果进行排序以获取序列。
jq 有没有办法使用除两个键之外的所有键进行分组? (在本例中为“状态”和带有增量编号的新密钥)。
有没有更好的方法来解决这个问题?
非常感谢你的帮助!