You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用于多模式过滤字符串文件的Awk修正脚本是否可行?

Awk脚本过滤PDB文件的正确性验证

需求说明

从输入文件输出所有行,需排除两类行:

  • 以"HETATM"开头且包含"lig"或"lih"的行
  • 以"END"开头的行
    最后在过滤后的文件末尾添加"END"。

原脚本问题

原脚本:

awk '!/^HETATM/ && /lig|lih |^END/; END {print "END"}' test.pdb >> ./processed.pdb

实际运行后几乎移除所有行,仅保留末尾手动添加的"END",文件内容为空。

错误原因:原脚本条件逻辑完全错误。它要求行不以"HETATM"开头,同时还要包含"lig"/"lih"或者以"END"开头。这意味着正常的非HETATM行(不含lig/lih)会被过滤,而原本要排除的"END"行反而被保留,最终导致绝大多数行不符合输出条件。

修正脚本的正确性验证

修正脚本:

awk '!/^HETATM.*(lig|lih)/ && !/^END/; END {print "END"}'

该脚本完全符合需求,逻辑拆解:

  • !/^HETATM.*(lig|lih)/:精准排除**以"HETATM"开头且后续包含"lig"或"lih"**的行,其余不含lig/lih的HETATM行会被保留
  • && !/^END/:同时排除所有以"END"开头的行
  • END {print "END"}:在所有过滤完成的内容末尾添加"END"

综上,修正脚本能够正确实现需求。

内容的提问来源于stack exchange,提问作者James Starlight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:03:14