Você pode usar a técnica usual awk
de-duplicating, somente no primeiro campo (os campos são separados por espaços):
awk '!count[$1]++'
Eu tenho um arquivo de texto semelhante a JSON de registros com ids duplicados semelhantes a:
{"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]}
Estou tentando filtrar as duplicatas e sempre manter a primeira ocorrência dessa correspondência. O campo ST poderia ser o mesmo, mas também diferente para os registros com o mesmo id.
A saída ficaria assim:
{"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]}
Uma pergunta semelhante já foi feita aqui , mas para este caso o arquivo de dados sendo editado era um arquivo separado por vírgula. Aqui estamos lidando com um dado JSON e o objetivo será encontrar as linhas que possuem os mesmos valores de id (pode ser uma correspondência de expressão regular) e manter a última. Alguém tem uma idéia de como lidar com isso com ferramentas de linha de comando awk, sed ou puras?
Você pode usar a técnica usual awk
de-duplicating, somente no primeiro campo (os campos são separados por espaços):
awk '!count[$1]++'
Tags grep awk filter shell-script