Text-Processing
如何通過將列與不規則數量的列匹配來連接兩個文件?
文件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 -j1 1 -j2 1 -t'|' -o 1.1 2.2 2.3 file1 file2
由於管道分隔符,我得到了錯誤的輸出。此外,我不能使用任何其他符號作為分隔符,因為任何符號都可以在第 2 列中使用。
我需要匹配文件 2 中的第 1 列並縱向複製第 2 列和第 3 列。
我還嘗試在 file2 中循環 file1 的第 1 列數據並獲取輸出,但這需要很長時間,因為我的文件非常大。
簡單
awk
,如果連接欄位是唯一的:awk -F"|" 'a[$1]++' file1 file2
-F"|"
將管道設置為分隔符a[$1]++
是一個條件。當條件為真時,列印該行。當第一個欄位$1
出現多次時,條件變為真。如果連接欄位不是唯一的:
awk -F"|" 'a[$1]++&&FNR!=NR' file1 file2
FNR!=NR
: 也是一個必須為真的條件。這僅適用於處理的第二個文件file2
。當您可以保證兩個文件中的第一個欄位是唯一的時,可以刪除該條件。