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

BASH中如何从外部文件提取可变ATOM编号并存储为变量

提取PDB文件中O5'对应的ATOM编号并存储为变量

我有一个名为xyz.file的PDB格式文件,部分内容如下:

ATOM 1 HO5' G5 1 7.415 -9.123 -8.109 1.00 0.00
ATOM 2 O5' G5 1 7.997 -8.960 -8.863 1.00 0.00
ATOM 3 C5' G5 1 9.136 -9.784 -8.729 1.00 0.00
ATOM 4 H5' G5 1 9.679 -9.808 -9.673 1.00 0.00
ATOM 5 H5'' G5 1 8.814 -10.797 -8.484 1.00 0.00
ATOM 6 C4' G5 1 10.067 -9.272 -7.628 1.00 0.00
ATOM 7 H4' G5 1 10.847 -10.015 -7.448 1.00 0.00
ATOM 8 O4' G5 1 10.700 -8.053 -7.990 1.00 0.00
ATOM 9 C1' G5 1 10.866 -7.262 -6.821 1.00 0.00
ATOM 10 H1' G5 1 11.907 -6.970 -6.696 1.00 0.00
ATOM 11 N9 G5 1 10.027 -6.048 -6.896 1.00 0.00

需要找到对应O5'行的ATOM编号(本例中为2),并将该编号存储为变量供后续使用。注意ATOM与目标编号所在列之间的空格数会随编号值变化而改变。


实用解决方法

1. awk(最推荐,处理结构化文本更可靠)

直接用awk按字段匹配,提取目标编号并赋值给变量:

o5_num=$(awk '$3 == "O5\047" {print $2}' xyz.file)

运行完后,变量o5_num就存储了目标编号,可通过echo $o5_num验证结果。

2. grep + cut

如果习惯用grep筛选行,再用cut提取字段:

o5_num=$(grep " O5'" xyz.file | cut -d' ' -f2 --output-delimiter=' ')

grep匹配串前加空格,是为了避免误匹配HO5'这类相似内容。

3. sed

用sed的正则替换提取编号:

o5_num=$(sed -n '/ O5'"'"'/s/^ATOM *\([0-9]*\).*/\1/p' xyz.file)

通过正则匹配ATOM后面的数字,只保留这部分内容输出。


内容的提问来源于stack exchange,提问作者Ethan Aminov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:57:24