unindo duas colunas de arquivos de texto separados

1

text1 :

ankr 
ankr
ankr
brmu
brmu

text2 :

jplg1730.17i
jplg1750.17i
jplg1770.17i

Eu preciso criar este arquivo de texto;

merged_file:
ankr_jplg1730.17i
ankr_jplg1750.17i
ankr_jplg1770.17i
brmu_jplg1730.17i
brmu_jplg1750.17i

Como posso mesclar esse arquivo de texto com códigos?

    
por deepblue 14.09.2017 / 13:42

2 respostas

2

awk :

awk 'NR==FNR {a[NR]=$0; next} {if (a[i]) {print $0"_"a[i]; ++i} \
                               else {print $0"_"a[1]; i=2}}' text2 text1
  • NR==FNR {a[NR]=$0; next} salva os registros de text2 como valores para a matriz associativa a , com os números de registro correspondentes sendo as chaves

  • {if (a[i]) {print $0"_"a[i]; ++i} else {print $0"_"a[1]; i=2}} imprime os registros de text1 no formato desejado, mantendo o controle da iteração do índice da matriz com a variável i

Exemplo:

% cat text1
ankr
ankr
ankr
brmu
brmu

% cat text2
jplg1730.17i
jplg1750.17i
jplg1770.17i

% awk 'NR==FNR {a[NR]=$0; next} {if (a[i]) {print $0"_"a[i]; ++i} else {print $0"_"a[1]; i=2}}' text2 text1
ankr_jplg1730.17i
ankr_jplg1750.17i
ankr_jplg1770.17i
brmu_jplg1730.17i
brmu_jplg1750.17i
    
por heemayl 14.09.2017 / 14:10
1

Com python:

$ python3 -c 'import sys, itertools as i; [print(a.strip(), b.strip(), sep="_") for a,b in zip(open(sys.argv[1]), i.cycle(open(sys.argv[2])))]' text1 text2
ankr_jplg1730.17i
ankr_jplg1750.17i
ankr_jplg1770.17i
brmu_jplg1730.17i
brmu_jplg1750.17i

Mais legivelmente:

#! /usr/bin/env python3
import sys
from itertools import cycle
with open(sys.argv[1]) as file1, open(sys.argv[2]) as file2:
    for l1, l2 in zip(file1, cycle(file2)):
        print(l1.strip(), l2.strip(), sep="_")

cycle(file2) faz o ciclo do conteúdo de file2 , de modo que, após a última linha ser lida, ela começa da primeira linha. zip pega uma linha de cada arquivo juntos.

    
por muru 14.09.2017 / 14:17