Text-Processing

如何通過將列與不規則數量的列匹配來連接兩個文件?

  • January 27, 2016

文件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。當您可以保證兩個文件中的第一個欄位是唯一的時,可以刪除該條件。

引用自:https://unix.stackexchange.com/questions/257975