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

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

Eu tenho dois arquivosstat_1.txt&stat_2.txt. Do seguinte modo:

id_trabalho | tempo de execução

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

12345 | 00:04:42.454282

12346 | 00:03:26.360487

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

id_trabalho | tempo de execução

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

12347 | 00:01:43.634521

12345 | 00:02:34,321451

É claro que existem milhares de registros em cada arquivo. Preciso organizar em um único arquivo oID de trabalhoque 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 de que deve haver uma maneira elegante no bash.

Os arquivos sãonão encomendadopor 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. Não estou familiarizado com a formatação e estou com pressa.)

Responder1

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 a serem 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

informação relacionada