特定の列の値に基づいて同じ形式の 2 つのファイルを結合します。

特定の列の値に基づいて同じ形式の 2 つのファイルを結合します。

ファイルが2つあります統計_1.txt統計_2.txt。 次のように:

ジョブID | 実行時間

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

12345 | 00:04:42.454282

12346 | 00:03:26.360487

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

ジョブID | 実行時間

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

12347 | 00:01:43.634521

12345 | 00:02:34.321451

もちろん、各ファイルには何千ものレコードがあります。1つのファイルに整理する必要があります。ジョブIDこれらは両方のファイルに存在し、実行時間の比較分析を行います。(テーブル結合で行うのと同様です。) これを実行するにはどうすればよいでしょうか? bash にはエレガントな方法があるはずです。

ファイルは注文されていないjob_id 別。一部の job_id は、一方のファイルにのみ存在し、もう一方のファイルには存在しません。(上記の表が雑に見えたら申し訳ありません。フォーマットに慣れておらず、少し急いでいます。)

答え1

そうやってもいいんだよ

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とtest2は結合する2つのファイルです

次に例を示します。

[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

関連情報