2つのファイルがあり、そのうちの1つには次のブロックが含まれています。
<record>
line1
line2
line3
#model bla bla bla
</record>
そして他のファイルにはまったく同じ数のブロックがありますが、ハッシュタグのコメントはありません。
<record>
line4
line5
line7
line8
line9
line10
</record>
だから私がしたいのは、ハッシュタグを最初のファイルの最初のブロックから2番目のファイルの最初のブロックにコピーし、他のファイルも次のように見えるようにすることです。
<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番目はタグなしのファイルです。
答え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