我的文件格式如下:
ATOM 3736 CB THR A 486 -6.552 153.891 -7.922 1.00115.15 C
ATOM 3737 OG1 THR A 486 -6.756 154.842 -6.866 1.00114.94 O
ATOM 3738 CG2 THR A 486 -7.867 153.727 -8.636 1.00115.11 C
ATOM 3739 OXT THR A 486 -4.978 151.257 -9.140 1.00115.13 O
HETATM10351 C1 NAG A 203 33.671 87.279 39.456 0.50 90.22 C
HETATM10483 C1 NAG A 702 28.025 104.269 -27.569 0.50 92.75 C
ATOM 3736 CB THR B 486 -6.552 86.240 7.922 1.00115.15 C
ATOM 3737 OG1 THR B 486 -6.756 85.289 6.866 1.00114.94 O
ATOM 3738 CG2 THR B 486 -7.867 86.404 8.636 1.00115.11 C
ATOM 3739 OXT THR B 486 -4.978 88.874 9.140 1.00115.13 O
HETATM10351 C1 NAG B 203 33.671 152.852 -39.456 0.50 90.22 C
HETATM10639 C2 FUC B 402 -48.168 162.221 -22.404 0.50103.03 C
我希望在每行以HETATM *开头后拆分文件,但前提是下一行以ATOM开头。我希望将新文件称为$ basename_ $ column,其中$ basename是输入文件的基本名称,$ column是22-23位的字符(示例中为A或B)。我无法弄清楚如何检查两条连续线以确定分裂点。
答案 0 :(得分:3)
这是awk
版本
awk 'NR==1{n=$5}/HETATM/{f=1}f && /^ATOM/{n=$5;f=0}{print > "file"n".txt"}' file
使用FILENAME
代替file
创建相同的文件名。
答案 1 :(得分:1)
这是一个简单的Python解决方案,没有错误检查。应该在Python 2或3中工作;更改第一行以匹配您的环境。不要把它作为良好编码风格的一个例子。
编辑了唯一的文件名。
#!/usr/bin/env python2.4
import os.path
import sys
fname = sys.argv[1]
bname = os.path.basename(fname)
fin = open(fname)
fout = None
ct = 0
for line in fin:
if line[:6] == 'HETATM':
flag = True
if (not fout) or (flag and line[:4] == 'ATOM'):
if fout:
fout.close()
ct += 1
fout = open(bname + '_' + line[21:22] + str(ct), 'w')
flag = False
fout.write(line)
fout.close()