Une dois arquivos com base em uma coluna

3

arquivo1:

a, 1    
b, 5    
c, 2    
f, 7

arquivo2:

a, 2    
f, 9    
g, 3

Eu quero juntar o arquivo 1 e o arquivo 2 com base na coluna 1 e obter o arquivo 3 conforme abaixo.

arquivo3:

a, 1, 2    
b, 5, -    
c, 2, -    
f, 7, 9    
g, -, 3

mescle os valores correspondentes e mantenha os específicos de cada arquivo

    
por chris 04.10.2017 / 06:56

1 resposta

5

Usando join :

$ join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' file1 file2
a, 1, 2
b, 5, -
c, 2, -
f, 7, 9
g, -, 3

O utilitário padrão join executará uma operação JOIN relacional nos dois arquivos de entrada classificados .

Os sinalizadores usados aqui informam ao utilitário para esperar entrada delimitada por vírgula ( -t, ) e para produzir saída para todas as entradas em ambos os arquivos ( -a 1 -a 2 , caso contrário, produziria somente saída para linhas com o primeiro campo correspondente). Em seguida, solicitamos que o campo de união junto com a segunda coluna de ambos os arquivos seja exibido ( -o0,1.2,2.2 ) e digamos que qualquer campo ausente deve ser substituído pela sequência de caracteres ␣- (espaço-traço, com -e ' -' ). / p>

Se a entrada não estiver classificada, ela deve ser pré-classificada. Em shells que entendem a substituição de processos com <( ... ) , isso pode ser feito através de

join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' <( sort file1 ) <( sort file2 )
    
por 04.10.2017 / 08:15

Tags