dois arquivos .csv comparam usando o awk

1

Eu preciso comparar dois arquivos, File1.csv e File2.csv (separados por ',') usando o Awk

Lógica:

Coluna PID em ambos os arquivos é referência.

Se para o mesmo 'PID' em 'File1.csv' e 'File2.csv' e em ambos os arquivos o valor da coluna 'Value' é o mesmo, então a atualização do valor 'UTS' da coluna 'File2.csv' para esta coluna obtendo o valor de Coluna 'File1.csv' 'RTS'.

Senão o mesmo 'PID' em 'File1.csv' e 'File2.csv' e em ambos os arquivos, o valor da coluna 'Value' não é o mesmo do que a coluna 'File2.csv' Valor, RTS, UTS 'update' para esta coluna obtendo valor da coluna 'Arquivo1.csv' 'Valor, RTS, UTS'

Arquivo1.csv:

PID,Value,RTS
1,50,10:30:00
2,22,10:15:00
3,34,10:18:00
4,54,10:20:00
5,54,10:22:00
6,54,10:25:00
7,80,10:50:00
8,60,10:32:00
9,45,10:35:00

Arquivo2.csv:

PID,Value,RTS,UTS
1,12,10:10:00,10:14:00
2,22,10:15:00,10:17:00
3,34,10:18:00,10:19:00
4,54,10:20:00,10:21:00
5,54,10:22:00,10:24:00
6,54,10:25:00,10:29:00
7,60,10:30:00,10:31:00
8,60,10:32:00,10:34:00
9,45,10:35:00,10:35:00

Saída:

PID,Value,RTS,UTS
1,50,10:30:00,10:30:00
2,22,10:15:00,10:15:00
3,34,10:18:00,10:18:00
4,54,10:20:00,10:20:00
5,54,10:22:00,10:22:00
6,54,10:25:00,10:25:00
7,80,10:50:00,10:50:00
8,60,10:32:00,10:32:00
9,45,10:35:00,10:35:00
    
por RaviJ 30.05.2014 / 11:00

1 resposta

1

Tente isto:

$ awk -F',' '
    FNR == NR {
        if (FNR == 1) {next}
        a[$1] = $2;
        b[$1] = $3;
        next;
    }
    {
        if (FNR == 1) {print;next}
        if (a[$1] == $2) {
            print $1,$2,$3,b[$1];
        }
        else {
            print $1,a[$1],b[$1],b[$1];
        }
    }
  ' OFS=',' file1,file2
PID,Value,RTS,UTS
1,50,10:30:00,10:30:00
2,22,10:15:00,10:15:00
3,34,10:18:00,10:18:00
4,54,10:20:00,10:20:00
5,54,10:22:00,10:22:00
6,54,10:25:00,10:25:00
7,80,10:50:00,10:50:00
8,60,10:32:00,10:32:00
9,45,10:35:00,10:35:00
    
por 30.05.2014 / 12:00