Corresponder valores e imprimir a soma com base na repetitividade no awk

1

Eu tenho os seguintes arquivos CSV:

Arquivo 1

19997,20161108,FSM,EXCHANGE_2,GLOBE,0  
17541,20161108,TATA_MOBILE,WORLD,TELECOM,1  
34556,20161108,europe,state,0  

Arquivo 2

EXCHANGE_2,CANADA,30298  
WORLD,INDIA,1123  
state,canada,2241  

Como faço para criar um novo arquivo que combina os dois, combinando a coluna 4 do arquivo 1 com a coluna 1 do arquivo 2? O resultado deve ser:

19997,20161108,FSM,EXCHANGE_2,GLOBE,0,CANADA,30298
17541,20161108,TATA_MOBILE,WORLD,TELECOM,1,INDIA,1123
34556,20161108,europe,state,0,canada,2241
    
por Ujjawal Khare 05.12.2016 / 19:10

2 respostas

0

Juntando dois arquivos por um campo comum, sendo uma tarefa típica para o comando join , permita-me responder com algo diferente de awk. Este é o código bash :

join -t, -1 4 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 <(sort -t, -k4 file1.csv) <(sort -t, -k1 file2.csv)
    
por 05.12.2016 / 19:44
0

Que tal

awk -F, 'NR==FNR {l[$4]=$0 ; next} {print l[$1]","$2","$3}' file1 file2

1º bloco NR==FNR {l[$4]=$0 ; next} está ativo enquanto o primeiro arquivo é lido e coloca toda a linha em um array associativo chamado l , usando o quarto campo como chave. next causa a omissão das seguintes instruções para essa linha.

2º Bloco {print l[$1]","$2","$3} está ativo somente quando o segundo arquivo é lido e usa a chave dada na primeira coluna do arquivo2 para procurar toda a linha armazenada no arquivo1. Isso, junto com duas vírgulas, e os campos $ 2 e $ 3 do arquivo 2 são impressos.

    
por 05.12.2016 / 20:27