Obtenção de linhas únicas com sequências de caracteres correspondentes [duplicado]

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?

    
por HarryJason 20.06.2015 / 21:15

1 resposta

2

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]++'
    
por 20.06.2015 / 21:22