Como remover linhas duplicadas em um CSV com base no primeiro campo e no primeiro n caracteres do segundo campo?

4

Para um arquivo csv de 3 colunas, list.csv , como você removeria linhas duplicadas subseqüentes nas quais o primeiro campo corresponde e apenas os primeiros 3 caracteres da segunda correspondência de campo? Algumas linhas terão um 2º campo com menos de 3 caracteres.

list.csv:

12,12345,a
12,12345,b
123,12345,a
1234,12,b
1234,12345,a
567,567,a
567,56712,a
567,56734,a
567,6789,a

Resultado esperado:

12,12345,a
123,12345,a
1234,12,b
1234,12345,a
567,567,a
567,6789,a
    
por Chris C 24.02.2018 / 01:36

2 respostas

8

sort também deve funcionar

 sort -t, -k1,1 -k2.1,2.3 -u <list.csv
 12,12345,a
 123,12345,a
 1234,12,b
 1234,12345,a
 567,567,a
 567,6789,a
    
por 24.02.2018 / 01:50
5
awk -F, '!seen[$1,substr($2,1,3)]++' list.csv 
12,12345,a
123,12345,a
1234,12,b
1234,12345,a
567,567,a
567,6789,a
    
por 24.02.2018 / 01:42