连接两个文件,每个文件有两列,其中多列被匹配

连接两个文件,每个文件有两列,其中多列被匹配

我有两个文件

文件A

MUREX_2089975   :SBE Zinc Non-Option    118510  metals  USD -308410
MUREX_2097300   :SBE Zinc Non-Option    118510  metals  USD 7751
MUREX_2097474   :SBE Zinc Non-Option    118510  metals  USD -140062
MUREX_2097928   :SBE Zinc Non-Option    118510  metals  USD 46504
MUREX_2099168   :SBE Zinc Non-Option    118510  metals  USD 38906
MUREX_2102690   :SBE Zinc Non-Option    118510  metals  USD -139992
MUREX_2106241                   
MUREX_2106570                   
MUREX_2106577                   
MUREX_2107869                   
MUREX_748219    :SBE Zinc Non-Option    118510  metals  USD 7743
MUREX_777665    :SBE Zinc Non-Option    118510  metals  USD 7750
MUREX_778819    :SBE Zinc Non-Option    118510  metals  USD 7743

文件B

MUREX_2089975   :SBE Zinc Non-Option    118510  metals  USD -296889
MUREX_2097300   :SBE Zinc Non-Option    118510  metals  USD 7450
MUREX_2097474                   
MUREX_2097928   :SBE Zinc Non-Option    118510  metals  USD 44699
MUREX_2099168                   
MUREX_2102690   :SBE Zinc Non-Option    118510  metals  USD -134474
MUREX_2106241   :SBE Zinc Non-Option    118510  metals  USD 7450
MUREX_2106570   :SBE Zinc Non-Option    118510  metals  USD -14942
MUREX_2106577   :SBE Zinc Non-Option    118510  metals  USD -14942
MUREX_2107869   :SBE Zinc Non-Option    118510  metals  USD 7450
MUREX_748219    :SBE Zinc Non-Option    118510  metals  USD 7444
MUREX_777665    :SBE Zinc Non-Option    118510  metals  USD 7453
MUREX_778819    :SBE Zinc Non-Option    118510  metals  USD 7444

我正在使用的代码:

join -t, -j 1 -a 1 -a 2 -o auto FileA FileB

我想要的基本上是比较每个文件的第 6 列,同时完整填写第 1 列到第 5 列。

预期结果

MUREX_2089975   :SBE Zinc Non-Option    118510  metals  USD -308410 -296889
MUREX_2097300   :SBE Zinc Non-Option    118510  metals  USD 7751    7450
MUREX_2097474   :SBE Zinc Non-Option    118510  metals  USD -140062 
MUREX_2097928   :SBE Zinc Non-Option    118510  metals  USD 46504   44699
MUREX_2099168   :SBE Zinc Non-Option    118510  metals  USD 38906   
MUREX_2102690   :SBE Zinc Non-Option    118510  metals  USD -139992 -134474
MUREX_2106241   :SBE Zinc Non-Option    118510  metals  USD         7450
MUREX_2106570   :SBE Zinc Non-Option    118510  metals  USD         -14942
MUREX_2106577   :SBE Zinc Non-Option    118510  metals  USD         -14942
MUREX_2107869   :SBE Zinc Non-Option    118510  metals  USD         7450
MUREX_748219    :SBE Zinc Non-Option    118510  metals  USD 7743    7444
MUREX_777665    :SBE Zinc Non-Option    118510  metals  USD 7750    7453
MUREX_778819    :SBE Zinc Non-Option    118510  metals  USD 7743    7444

实际结果

MUREX_2089975   :SBE Zinc Non-Option    118510  metals  USD -308410 :SBE Zinc Non-Option    118510  metals  USD -296889
MUREX_2097300   :SBE Zinc Non-Option    118510  metals  USD 7751    :SBE Zinc Non-Option    118510  metals  USD 7450
MUREX_2097474   :SBE Zinc Non-Option    118510  metals  USD -140062                 
MUREX_2097928   :SBE Zinc Non-Option    118510  metals  USD 46504   :SBE Zinc Non-Option    118510  metals  USD 44699
MUREX_2099168   :SBE Zinc Non-Option    118510  metals  USD 38906                   
MUREX_2102690   :SBE Zinc Non-Option    118510  metals  USD -139992 :SBE Zinc Non-Option    118510  metals  USD -134474
MUREX_2106241                                                       :SBE Zinc Non-Option    118510  metals  USD 7450
MUREX_2106570                                                       :SBE Zinc Non-Option    118510  metals  USD -14942
MUREX_2106577                                                       :SBE Zinc Non-Option    118510  metals  USD -14942
MUREX_2107869                                                       :SBE Zinc Non-Option    118510  metals  USD 7450
MUREX_748219    :SBE Zinc Non-Option    118510  metals  USD 7743    :SBE Zinc Non-Option    118510  metals  USD 7444
MUREX_777665    :SBE Zinc Non-Option    118510  metals  USD 7750    :SBE Zinc Non-Option    118510  metals  USD 7453
MUREX_778819    :SBE Zinc Non-Option    118510  metals  USD 7743    :SBE Zinc Non-Option    118510  metals  USD 7444

edit1:数据实际外观的一个示例:

 MUREX_990422,:SBE Zinc Non-Option,118510,metals,USD,15501

答案1

我认为这不能直接完成加入。您可以做的是首先提取包含所有键和第 1-5 列的文件,以用作每行的开头。然后你可以使用加入将两个数字放在最后。

仅包含连接字段的行在现实中是什么样子的?是只是字段,还是后面带逗号的字段?在前一种情况下,你可以这样做

awk -F , 'NF > 1 {print}' fileA fileB | cut -d, -f1-5 | sort -u | \
join -t, -o 0,1.2,1.3,1.4,1.5,2.6 - fileA | \
join -t, -o 0,1.2,1.3,1.4,1.5,1.6,2.6 - fileB

相关内容