【发布时间】:2019-04-23 14:43:01
【问题描述】:
我想知道的是如何使用 PERL 或 Bash 在字符串/数组中定位原子 H 位置(作为列号而不是字符号)?我试图避免不必要的循环来搜索 H,因为我的数据有超过一百万行。
我的研究数据如下所示
FRAM_# 20000000 5000000(fs) CN= 1 PRMRYTGT 16652 O 16654 H 1.036 8140 CA 2.586 7319 AL 1.963
其中,有 O、H、CA 和 AL 原子。第一个原子是目标原子氧,其余原子是与目标氧结合的邻居。除第一个原子(氧)外,每个原子前面的整数为原子ID,后面的浮点数为与第一个原子的键长O(ID=16652)。
$line = 'FRAM_# 20000000 5000000(fs) CN= 1 PRMRYTGT 16652'
. ' O 16654 H 1.036 8140 CA 2.586'
. ' 7319 AL 1.963';
@values = split(/\s+/, $line);
my $bondlength;
my $neighbor_ID;
for (my $i = 10; $i <= $#values; $i = $+3) {
if ($values[$i] eq 'H') {
$neighbor_ID = $values[$i-1];
$bondlength = $values[$i+1];
} else {
next;
}
我可以使用循环在数组@values 中搜索H 的位置。但是,是否有任何其他方式(不是循环),如正则表达式或 BASH 脚本,来获取 H 在数组中的位置?如果您能给我额外的建议和帮助,我将不胜感激。
我想找到 H 和目标氧之间的氢键(键长大于 1.5 埃)。所以,我必须得到 H 的原子 ID 和相关的键长。所以,首先,我需要找到 H 的位置。然后找到原子 ID 和相关的键长。然后我可以做进一步的数据分析。
注意:我有超过100万的数据线,因此,我必须考虑代码效率。在这个例子中,H 是我的目标原子。在数据线中,H的数量可以是多种多样的。
【问题讨论】:
-
你想要什么,H之后的值?
-
您需要向我们提供更多详细信息。对于这行输入,你想要什么输出?
-
我需要获取原子 ID(这里是 H)和 H 与目标原子(这里是氧)之间的键长。
-
我再问一次。对于这行输入,你想要什么输出?