Copiando comentários de hashtag recursivamente dentro de blocos

2

Eu tenho dois arquivos, um com blocos como

<record>
line1
line2
line3
#model bla bla bla
</record>

enquanto o outro arquivo tem exatamente o mesmo número de blocos, mas sem os comentários da hashtag, ou seja,

<record>
line4
line5
line7
line8
line9
line10
</record>

Então, o que eu quero fazer é copiar do primeiro bloco do primeiro arquivo a hashtag para o primeiro bloco do segundo arquivo para que meu outro arquivo também se pareça com

<record>
line4
line5
line7
line8
line9
line10
#model bla bla bla
</record>
    
por Alex 30.11.2012 / 17:16

2 respostas

2

Se você quiser, na mesma ordem, um código pequeno em python

import os
os.rename("second","second~")
a=[]
f=open("first","r")
lines=f.readlines()
b=-1
for line in lines:
    if "</record>" in str(line):
        if b!=-1:
            a.append(lines[b])
        else:
            print "</record> found in first line"
    b=b+1
f.close()
b=0
destination = open("second","w")
source = open("second"+"~","r")
for line in source:
    if "</record>" in str(line):
        destination.write(a[b])
        b=b+1
    destination.write(line)
source.close()
destination.close()

nota: primeiro é o arquivo que contém a hashtag e o segundo é o arquivo sem hashtag

    
por 30.11.2012 / 17:59
1

Do seu exemplo, parece que este simples comando do awk deve ser suficiente:

awk '/<\/record/{"grep \^\# file1"|getline a; print a};1' file2

Ou, se você entender os requisitos adicionais expostos nos comentários para a outra resposta que você esqueceu de adicionar à sua pergunta ;-), as hashtags podem aparecer fora de <record> blocks:

sed '/<record>/,/<\/record>/!d;/^#/!d' < file1 |
  awk '/<\/record/{getline a < "-"; print a};1' file2
    
por 30.11.2012 / 22:27

Tags