ファイル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番目のファイルにのみ適用されます。両方のファイルの最初のフィールドが一意であることを保証できる場合は、この条件を削除できます。