共通フィールドに基づいて2つのファイルを結合する

共通フィールドに基づいて2つのファイルを結合する

共通フィールドに基づいて2つのファイルをリンクし、コマンドを使用してファイルに出力しようとしていますjoin

ファイル1:

C01:Nancy:Jones:[email protected] 
C02:Barbara:Madison:[email protected] 
C03:Tim:Adams:[email protected]
C04:Sarah:Moore:[email protected]
C05:John:Polk:[email protected]
C06:Paula:Jacobs:[email protected]

ファイル2:

R001:07/04/15:123.45:C01
R002:12/20/15:167.50:C03
R003:03/14/16:298.00:C06
R005:09/15/16:36.50:C03
R005:11/27/16:58.00:C02
R006:02/28/17:72.98:C05 

期待される出力

C01:Nancy:Jones:[email protected]:R001:07/04/15:123.45
C02:Barbara:Madison:[email protected]:R005:11/27/16:58.00
C03:Tim:Adams:[email protected]:R002:12/20/15:167.50
C03:Tim:Adams:[email protected]:R004:09/15/16:36.5
C05:John:Polk:[email protected]:R006:02/28/17:72.9
C06:Paula:Jacobs:[email protected]:R003:03/14/16:298.00

まず、フィールド4に基づいてソートし、新しいファイルに出力しFile2ました。

sort -t: -k 4 File2 > File22  

それからサインアップ

join -t: -1 1 -2 4 -o '1.1 1.2 1.3 1.4 2.1 2.2 2.3' File1 File22 > File 3  

ただし、常に空の出力ファイルが表示されます。また、行方不明を処理する方法がわからない。4号線fromFile1とこの事実C03はに2回表示されますFile2

ベストアンサー1

必要な方法でタスクを実行するには、2つのタスクを実行する必要があります。> File 3まず、出力をコマンドにリダイレクトFileし、コマンドの最後に追加のパラメータを追加して、コマンドに3追加のパラメータを追加できます。join

なぜこれが起こるのかを説明するために、最近(偶然!)同様の質問に答えました。マニュアルページリダイレクトの奇妙な動作。デフォルトでは Bash 構文に関する内容で、 で詳細を読むことができますman bash

動作を変更するには、出力ファイルにスペースがないことを確認するか、スペースをエスケープするか、ファイル名を引用符で囲む必要があります。次のリダイレクトのいずれかが機能します。

... > File3
... > File\ 3
... > "File 3"

これで、出力から欠落しているレコードを修正します。これは-aフラグによって処理されます。からman join

-a FILENUM
       also print unpairable lines from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2

tee要約すると、次のコマンドは私にとって効果的でした(出力を表示するためにリダイレクトの代わりに使用します)。

$ join -t: -1 1 -2 4 -o '1.1 1.2 1.3 1.4 2.1 2.2 2.3' -a 1 File1 <(sort -t: -k4 File2) | tee "File 3"
C01:Nancy:Jones:[email protected] :R001:07/04/15:123.45
C02:Barbara:Madison:[email protected] :R005:11/27/16:58.00
C03:Tim:Adams:[email protected]:R002:12/20/15:167.50
C03:Tim:Adams:[email protected]:R005:09/15/16:36.50
C04:Sarah:Moore:[email protected]:::
C05:John:Polk:[email protected]:::
C06:Paula:Jacobs:[email protected]:R003:03/14/16:298.00

おすすめ記事