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

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

ファイルが2つあります。stat_1.txt&stat_2.txt。次のように:

ジョブID実行時間処理時間

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

12345 00:04:42.454282 |

12346 | 00:03:26.360487

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

ジョブID実行時間処理時間

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

12347 | 00:01:43.634521

12345 00:02:34.321451 |

もちろん、各ファイルには何千ものレコードがあります。ファイルで整理する必要があります。役職番号実行時間を比較分析するために、両方のファイルが提供されます。 (テーブル結合でできることと似ています。)どうすればよいですか? 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

おすすめ記事