Una dois arquivos cada um com duas colunas com várias colunas correspondentes

2

Eu tenho dois arquivos

Arquivo 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

Arquivo 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

Código que estou usando:

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

O que eu quero é basicamente comparar a coluna 6 de cada arquivo enquanto preenche a coluna 1 a 5.

Resultado Esperado

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

Resultado Real

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: Um exemplo de como os dados realmente se parecem:

 MUREX_990422,:SBE Zinc Non-Option,118510,metals,USD,15501
    
por Kyle Gong 17.11.2016 / 22:08

1 resposta

0

Eu não acho que isso possa ser feito diretamente com join . O que você pode fazer é primeiro extrair um arquivo que contenha todas as chaves e as colunas de 1 a 5, para usar como um começo de cada linha. Então você pode usar join para colocar os dois números no final.

Como são as linhas que contêm apenas o campo de junção na realidade? É apenas o campo, ou é o campo com vírgulas depois? No primeiro caso, você poderia fazer algo assim

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
    
por 17.11.2016 / 23:59