获取具有匹配字符串的唯一行

获取具有匹配字符串的唯一行

我有一个类似于 JSON 的记录文本文件,其中包含重复的 id,如下所示:

{"ID":"93" , "ST":[42,77,51]}
{"ID":"21" , "ST":[43,4]}
{"ID":"94" , "ST":[65,11,4]}
{"ID":"93" , "ST":[42,77,51,29,63]}
{"ID":"73" , "ST":[21,20]}
{"ID":"94" , "ST":[65,11,4]}
{"ID":"77" , "ST":[87]}

我正在尝试过滤重复项并始终保留此类匹配项的第一次出现。对于具有相同 id 的记录,字段 ST 可以相同,也可以不同。

输出如下:

{"ID":"93" , "ST":[42,77,51]}
{"ID":"21" , "ST":[43,4]}
{"ID":"94" , "ST":[65,11,4]}
{"ID":"73" , "ST":[21,20]}
{"ID":"77" , "ST":[87]}

类似的问题已经被问过这里,但在本例中,正在编辑的数据文件是逗号分隔的文件。这里我们正在处理 JSON 数据,目标是找到具有相同 id 值的行(可能是正则表达式匹配)并保留最新的行。有人知道如何使用 awk、sed 或纯命令行工具来解决这个问题吗?

答案1

您可以awk仅在第一个字段上使用常用的重复数据删除技术(字段之间用空格分隔):

awk '!count[$1]++'

相关内容