
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