copiar linhas de texto entre dois arquivos usando correspondências de cadeia

0

Procurando por alguma ajuda, eu tenho dois arquivos, um é uma grande lista de vários nomes, o outro é coordenadas. ambos os arquivos iniciam cada linha com um código de 8 dígitos. Eu quero pesquisar código de linha de 8 dígitos do arquivo1 e copie o conteúdo da linha para todos os códigos de linha correspondentes no arquivo2.

(File1) Apenas uma ocorrência de hash / nome.

136667ED ap1_01_a_ap1_01_rails_07
035B337C ap1_01_a_arrows_005
79546F82 ap1_01_a_centreline_010
0E1D31E7 prop_bush_med_02

(Arquivo2) Alguns possuem múltiplas cópias hash como 0E1D31E7, com diferentes coordenadas.

136667ED -1294.6945,-2376.0317,21.8279
035B337C -1314.6719,-2721.7378,12.9467
79546F82 -1283.1066,-2529.9771,12.9635
0E1D31E7 1919.4160,-1814.3889,160.5210
0E1D31E7 1919.9885,-2628.2529,0.7537  
0E1D31E7 192.0235,-2603.1790,4.9978   
0E1D31E7 192.1050,4950.3540,389.4736

Abaixo está como eu gostaria deles, O código / nome de 8 dígitos, copiado em qualquer correspondência de linha de código no arquivo 2.

136667ED -1294.6945,-2376.0317,21.8279  136667ED ap1_01_a_ap1_01_rails_07  
035B337C -1314.6719,-2721.7378,12.9467  035B337C ap1_01_a_arrows_005       
79546F82 -1283.1066,-2529.9771,12.9635  79546F82 ap1_01_a_centreline_010   
0E1D31E7 1919.4160,-1814.3889,160.5210  0E1D31E7 prop_bush_med_02          
0E1D31E7 1919.9885,-2628.2529,0.7537    0E1D31E7 prop_bush_med_02          
0E1D31E7 192.0235,-2603.1790,4.9978     0E1D31E7 prop_bush_med_02          
0E1D31E7 192.1050,4950.3540,389.4736    0E1D31E7 prop_bush_med_02          

Junte linhas de texto com início repetido

Isso pode funcionar, eu não sei como executar qualquer um desses comandos. Eu estou usando o windows.

    
por Poly 13.06.2016 / 20:06

2 respostas

0

Com base em sua entrada, aqui está a saída usando o comando paste para padronizar:

$ paste File1 File2
136667ED ap1_01_a_ap1_01_rails_07   136667ED -1294.6945,-2376.0317,21.8279
035B337C ap1_01_a_arrows_005    035B337C -1314.6719,-2721.7378,12.9467
79546F82 ap1_01_a_centreline_010    79546F82 -1283.1066,-2529.9771,12.9635

Como você tem arquivos grandes, considere redirecionar a saída para um arquivo usando paste File1 File2 > mergedfile .

    
por 13.06.2016 / 20:23
0

Usando join e um shell que entende de substituição de processo:

$ join <(sort file2) <(sort file1)
035B337C -1314.6719,-2721.7378,12.9467 ap1_01_a_arrows_005
0E1D31E7 1919.4160,-1814.3889,160.5210 prop_bush_med_02
0E1D31E7 1919.9885,-2628.2529,0.7537 prop_bush_med_02
0E1D31E7 192.0235,-2603.1790,4.9978 prop_bush_med_02
0E1D31E7 192.1050,4950.3540,389.4736 prop_bush_med_02
136667ED -1294.6945,-2376.0317,21.8279 ap1_01_a_ap1_01_rails_07
79546F82 -1283.1066,-2529.9771,12.9635 ap1_01_a_centreline_010

Ou para duplicar o campo de junção no meio da saída:

$ join -o0,1.2,0,2.2 <(sort file2) <(sort file1)
035B337C -1314.6719,-2721.7378,12.9467 035B337C ap1_01_a_arrows_005
0E1D31E7 1919.4160,-1814.3889,160.5210 0E1D31E7 prop_bush_med_02
0E1D31E7 1919.9885,-2628.2529,0.7537 0E1D31E7 prop_bush_med_02
0E1D31E7 192.0235,-2603.1790,4.9978 0E1D31E7 prop_bush_med_02
0E1D31E7 192.1050,4950.3540,389.4736 0E1D31E7 prop_bush_med_02
136667ED -1294.6945,-2376.0317,21.8279 136667ED ap1_01_a_ap1_01_rails_07
79546F82 -1283.1066,-2529.9771,12.9635 79546F82 ap1_01_a_centreline_010

Para colunas mais agradáveis:

$ join -o0,1.2,0,2.2 <(sort file2) <(sort file1) | column -t
035B337C  -1314.6719,-2721.7378,12.9467  035B337C  ap1_01_a_arrows_005
0E1D31E7  1919.4160,-1814.3889,160.5210  0E1D31E7  prop_bush_med_02
0E1D31E7  1919.9885,-2628.2529,0.7537    0E1D31E7  prop_bush_med_02
0E1D31E7  192.0235,-2603.1790,4.9978     0E1D31E7  prop_bush_med_02
0E1D31E7  192.1050,4950.3540,389.4736    0E1D31E7  prop_bush_med_02
136667ED  -1294.6945,-2376.0317,21.8279  136667ED  ap1_01_a_ap1_01_rails_07
79546F82  -1283.1066,-2529.9771,12.9635  79546F82  ap1_01_a_centreline_010
    
por 21.09.2017 / 20:21