比较一系列分子的相似性

2024-04-27 10:56:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个化学家和一个普通的python程序员。我试图比较不同的分子,这些分子被保存为.xyz文件在一个文件夹中。我们的计算集群(comparestructures)上有一个脚本,可以比较任意两个分子,判断它们是否相似/相同。我需要把所有的分子相互比较,找出重复的/相似的分子,这样我就可以把它们从研究中剔除。你知道吗

我已经尝试在所有分子上运行以下bash脚本:(comp1是compound1的缩写)

#!/bin/sh
for comp1; do
  shift
  for comp2; do
    echo "Comparing '$comp1' with '$comp2'"
    comparestructures "$comp1" "$comp2" && echo "${comp1%.*}" "is-identical-to" "${comp2%.*}" >> identical.txt || echo "$comp1" "is-different-than" "$comp2" >> different.txt
  done
done

问题是我得到了一个列表,我不能很容易地确定哪些删除,因为一些分子发生在左右两侧的输出打印。有没有什么办法我可以得到一个分子列表(每个相似的一对一个),这样我就可以删除它们,保留唯一的一对。我需要这个为我的研究工作和帮助将不胜感激。你知道吗


Tags: echotxt脚本列表forisdo分子
1条回答
网友
1楼 · 发布于 2024-04-27 10:56:38

如果AB相同,而BC相同,我认为您希望BC被删除,而A被保留。现在,您可以执行以下操作:

for A in `ls`; do
  [[ -e $A ]] || continue;
  mkdir identical
  for B in `ls`; do
    [ "$A" != "$B" ] && comparestructures "$A" "$B" && mv "$B" identical
  done
  rm -r identical
done

这显然不是最好最快的解决方案,但我太累了,无法想象更好的解决方案。如果您想测试这个脚本,我建议您将mkdir identical表达式放在循环之外,删除rm -r identical行,然后看看是否没有问题。你知道吗

相关问题 更多 >