不規則な数の列と列を一致させて2つのファイルを結合する方法は?

不規則な数の列と列を一致させて2つのファイルを結合する方法は?

ファイル1:

0000002|SLM DEV CORP                                               |PO 857
0000003|S TOPPING                                                   |APT 19
0000004|JD  BROS LTD                                                |PO 118
0000005|ZKZ SERVICES                                                |14699  CREDITVIEW RD

ファイル2:

0000001|GTI CONSULTING                     |4513 GLADEBROOK CRES    
0000002|SLM DEVELOPMENT CORP | SLM         |PO BOX 857              
0000003|S TOPPING                          |APT 19                  
0000004|JD PLETT BROS LTD                  |PO BOX 118              
0000005|ZKZ SERVICES |ZKZ                  |14699  CREDITVIEW RD    

予想出力:

0000002|SLM DEVELOPMENT CORP | SLM         |PO BOX 857
0000003|S TOPPING                           |APT 19
0000004|JD PLETT BROS LTD                   |PO BOX 118
0000005|ZKZ SERVICES |ZKZ                   |14699  CREDITVIEW RD

私はJoinコマンドを試しました。

join -j1 1 -j2 1 -t'|' -o 1.1 2.2 2.3 file1 file2

パイプ区切り記号が原因で誤った出力が発生します。また、列 2 にはすべての記号を使用できるため、他の記号を区切り記号として使用することはできません。

ファイル2の列1を一致させ、列2と3を垂直にコピーする必要があります。

また、file2からfile1の列1のデータを繰り返し出力を取得しようとしましたが、ファイルが非常に大きいため、時間がかかります。

ベストアンサー1

awk結合フィールドが一意の場合は、単に使用してください。

awk -F"|" 'a[$1]++' file1 file2
  • -F"|"パイプを区切り記号として設定
  • a[$1]++条件です。条件が true の場合、対応する行が印刷されます。最初のフィールドが$1複数回表示される場合、条件は true です。

結合フィールドが一意でない場合:

awk -F"|" 'a[$1]++&&FNR!=NR' file1 file2
  • FNR!=NR:やはり真でなければならない条件です。これはfile2処理された2番目のファイルにのみ適用されます。両方のファイルの最初のフィールドが一意であることを保証できる場合は、この条件を削除できます。

おすすめ記事