Combine dois arquivos com o mesmo formato com base nos valores de uma coluna específica

0

Eu tenho dois arquivos stat_1.txt & stat_2.txt . Como segue:

job_id | execution_time

-------- + --------------------

12345 | 00: 04: 42.454282

12346 | 00: 03: 26.360487

====================

job_id | execution_time

-------- + --------------------

12347 | 00: 01: 43.634521

12345 | 00: 02: 34.321451

Existem, obviamente, mais milhares de registros em cada arquivo. Eu preciso organizar em um único arquivo o job_id que estão presentes em ambos os arquivos, para fazer uma análise comparativa dos tempos de execução. (semelhante ao que poderíamos fazer em uma junção de tabela.) Como faço isso? Tenho certeza que deve haver uma maneira elegante no bash.

Os arquivos não são solicitados por job_id. Existem alguns job_id que estão presentes em apenas um arquivo, mas não no outro. (Desculpe se as tabelas acima parecem desleixadas. Eu não estou familiarizado com a formatação, e estou com um pouco de pressa.)

    
por RodrikTheReader 28.04.2017 / 14:48

1 resposta

0

Você pode fazer assim

awk 'NR==FNR{a[$1$2]=$3;next}
{k=$1$2;print k,a[k],$3;delete a[k]}
END{for(k in a)print k,a[k]}' test1 test2

test1 e test2 são os dois arquivos combinados

Aqui está o exemplo:

[xxxx@xxxx test]$ awk 'NR==FNR{a[$1$2]=$3;next}
                  {k=$1$2;print k,a[k],$3;delete a[k]}
                  END{for(k in a)print k,a[k]}' test1 test2

job_id | execution_time execution_time
--------+--------------------
12347 |  00:01:43.634521
12345 | 00:04:42.454282 00:02:34.321451
12346 | 00:03:26.360487
    
por 28.04.2017 / 16:08