2つの列の一致に基づいて2つのファイルをマージする方法は? CSV

2つの列の一致に基づいて2つのファイルをマージする方法は? CSV

私はfile1が好きです:

6688249-7,03/02/2017、5515、2017年2月2日

16914917-8,03/02/2017、5521、2017年2月2日

ファイル2もあります。

5515,6688249-7,06-02-2017 04:25:47 PM,ASIG,エリザベス プリエト

5515,6688249-7,06-02-2017 04:56:32 PM,URR,エリザベス プリエト

5521,16914917-8,06-02-2017 午後 12:51:04,指定,SOLANGE

5521,16914917-8,27-02-2017 04:32:11 PM (例: SOLANGE)

次のようなfile3が欲しい。

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,エリザベス プリエト

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,エリザベス・プリエト

16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE

16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

2番目の列のキー(3番目の列のfile1、1番目の列のfile1)を介してfile2の3番目、4番目、5番目の列をfile1に入れるという意味です。

答え1

次のようなもので十分です。

awk 'BEGIN{FS=OFS=","}NR==FNR{a[$3]=$0;next}$1 in a{print a[$1],$3,$4,$5}' file1 file2

答え2

出力ソート順序が重要でない場合は、操作のように見えます。join

join -1 3 -2 1 -t, -o 1.1,1.2,1.3,1.4,2.3,2.4,2.5 <(sort -k3,3 -t, file1) \
    <(sort -k1,1 -t, file2)


6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO
6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO
16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE
16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

入力は結合キーに従ってソートする必要がありますjoin。上記の例では、プロセス置換を使用します(次のようなシェルでサポートされています)。bash

関連情報