Como mesclar dois arquivos com base na correspondência de duas colunas? CSV

3

Eu tenho gostos de arquivo1:

6688249-7,03/02/2017,5515,02-feb-17

16914917-8,03/02/2017,5521,02-feb-17

E um arquivo2:

5515,6688249-7,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO

5515,6688249-7,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO

5521,16914917-8,06-02-2017 12:51:04 PM,ASIGN,SOLANGE

5521,16914917-8,27-02-2017 04:32:11 PM,Ex,SOLANGE

E gostaria que um arquivo3 assim:

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO

16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE

16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

O que significa colocar as colunas 3ª, 4ª e 5ª do arquivo2 no arquivo1 pela chave da segunda coluna (arquivo da 3ª coluna, arquivo 1ª coluna 1)

    
por Daniel Zigma 12.03.2017 / 00:48

2 respostas

2

Algo como isso deve ser suficiente:

awk 'BEGIN{FS=OFS=","}NR==FNR{a[$3]=$0;next}$1 in a{print a[$1],$3,$4,$5}' file1 file2
    
por 12.03.2017 / 01:05
0

se a ordem de classificação de saída for imaterial, isso parece um trabalho para join

join -1 3 -2 1 -t, -o 1.1,1.2,1.3,1.4,2.3,2.4,2.5 <(sort -k3,3 -t, file1) \
    <(sort -k1,1 -t, file2)


6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO
6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO
16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE
16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

As entradas para join precisam ser classificadas na chave de junção, o exemplo acima usa a substituição de processo (suportada por shells como bash ) para conseguir isso

    
por 12.03.2017 / 05:00