두 개의 파일이 있는데 그 중 하나에는 다음과 같은 블록이 포함되어 있습니다.
<record>
line1
line2
line3
#model bla bla bla
</record>
그리고 다른 파일에는 정확히 동일한 수의 블록이 있지만 해시태그 주석은 없습니다.
<record>
line4
line5
line7
line8
line9
line10
</record>
그래서 제가 하고 싶은 것은 해시태그를 첫 번째 파일의 첫 번째 블록에서 두 번째 파일의 첫 번째 블록으로 복사하여 다른 파일도 다음과 같이 보이도록 하는 것입니다.
<record>
line4
line5
line7
line8
line9
line10
#model bla bla bla
</record>
답변1
동일한 순서로 작은 코드를 사용하고 싶은 경우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()
참고: 첫 번째는 태그가 포함된 파일이고, 두 번째는 태그가 없는 파일입니다.
답변2
귀하의 예에서 보면 다음과 같은 간단한 awk 명령으로 충분할 것 같습니다.
awk '/<\/record/{"grep \\^\\# file1"|getline a; print a};1' file2
또는 질문에 추가하는 것을 잊어버린 다른 답변의 주석에 공개된 추가 요구 사항에서 볼 수 있듯이 해시 태그가 <record>
블록 외부에 나타날 수 있습니다.
sed '/<record>/,/<\/record>/!d;/^#/!d' < file1 |
awk '/<\/record/{getline a < "-"; print a};1' file2