Unindo linhas com o mesmo campo

3

Eu tenho dois arquivos desta forma:

File1: id:0.0260509118455
File2: id:X:Y

Gostaria de obter um terceiro arquivo com todas as linhas do file1 unidas às linhas do segundo arquivo contendo o mesmo id. ou seja:

File3: id:0.0260509118455:X:Y

(file1 tem 100 linhas, file2 tem 666 linhas).  Não há linhas não parciais

    
por viral 27.02.2017 / 17:05

3 respostas

2

Para unir arquivos que contenham tabelas de banco de dados, use o comando join após classificar as tabelas em ordem de chave:

sort -b -t : file1 > sorted-file1
sort -b -t : file2 > sorted-file2
join -t : sorted-file1 sorted-file2

Leitura adicional

por 27.02.2017 / 17:21
0

Você deve poder fazer isso com o comando "colar". Ele lê as colunas em vez de linhas.

awk -F: '{ print $2}' File2 > File4

Para remover o id: tag

Então

paste  File1 File4 > File3

Deve fazer o trabalho.

    
por 27.02.2017 / 17:16
0

Você também pode fazer isso com awk, verificando o id, sem a necessidade de ordenar ou pré-processar os arquivos de qualquer forma:

awk -F: 'NR==FNR{a[$1]=$0;next}$1 in a {print a[$1],$2,$3}' OFS=: file1 file2 >file3

PS: Para obter um desempenho, um arquivo pequeno (arquivo1 de 100 linhas) é carregado primeiro na memória, e um arquivo grande é comparado com a memória.

    
por 28.02.2017 / 12:23