如何仅用sed单行命令完成删除HETATM行及合并pdb文件操作
问题描述
我需要完成两项pdb文件处理操作:
- 删除
file1.pdb中所有以HETATM开头的行 - 将
fil2.pdb与处理后的file1.pdb内容合并,输出为新文件file3.pdb
目前使用的两行命令如下:
sed -i '/^HETATM/ d' file1.pdb cat fil2.pdb file1.pdb > file3.pdb
咨询是否可以仅使用sed工具,通过单行命令实现上述全部操作?
解答
完全可以,且单行命令不会像原命令一样直接修改源文件file1.pdb,操作风险更低,对应命令如下:
sed 'FNR==NR{print;next} /^HETATM/d' fil2.pdb file1.pdb > file3.pdb
命令执行逻辑:
- sed按传入顺序依次读取两个输入文件,先处理
fil2.pdb,再处理file1.pdb - 规则
FNR==NR{print;next}:处理第一个文件fil2.pdb时,当前文件行号FNR和全局累计行号NR数值相等,此时直接原样输出所有行内容,跳过后续规则,保证fil2.pdb完整输出在文件最前端 - 规则
/^HETATM/d:处理第二个文件file1.pdb时,FNR会重置为1重新计数,不再和全局NR相等,此时自动跳过所有以HETATM开头的行不输出,实现删除对应行的需求 - 最终所有符合要求的内容通过重定向写入
file3.pdb,输出结果和原命令执行效果完全一致,全程不会改动两个原始输入文件。
内容的提问来源于stack exchange,提问作者James Starlight
相关产品推荐
相关产品推荐

