Estou tentando remover duplicatas de um arquivo csv grande, com base nos valores con na coluna 1, mas considerando o seguinte:
A coluna 3 pode estar vazia ou ter vários valores separados por :::
Se houver mais de um valor repetido na coluna1, mantenha o registro que possui o número máximo de elementos dentro da coluna 3. Remova os -
números entre na coluna3 caso exista.
Minha entrada é:
H1,H2,H3,H4
a,2,8005:::+2287:::3426,2
b,4,1111:::+15-00:::01354,1
b,4,1111:::+1500,1
c,4,2208:::+6583,9
d,5,7761:::+993733:::+53426,4
d,5,7761:::+993-733:::+53-426:::87425,4
d,5,7761:::53-426,4
A saída que estou tentando obter é:
H1,H2,H3,H4
a,2,8005:::+2287:::3426,2
b,4,1111:::+1500:::01354,1
c,4,2208:::+6583,9
d,5,7761:::+993733:::+53426:::87425,4
Meu script atual apenas remove duplicatas sem as outras considerações, já que não sei como misturar os dois scripts e como adicionar a condição para manter o registro que possui mais elementos na coluna 3.
awk -F, '{ gsub(/-/,"", $3); print } ' input.csv > input_without_hyphen.csv
awk -F',' -v OFS=',' '!a[$1]++' input_without_hyphen.csv > output.csv
Obrigado por qualquer ajuda.
Premissas:
Uma
awk
ideia:Isso gera:
NOTA: embora os dados tenham saído na mesma ordem da saída esperada do OP, a ordem nem sempre é garantida; se a ordem das linhas for importante, precisaríamos adicionar mais código