比较相似性分子列表

时间:2018-05-08 05:07:50

标签: python bash

我是化学家和普通的python程序员。我试图比较在文件夹中保存为.xyz文件的不同分子。我们的计算集群(comparestructures)上有一个脚本可以比较任何两个分子并判断它们是否相似/相同。我需要比较所有分子,以确定重复/相似的分子,以便我可以将它们从研究中删除。

我尝试了以下bash脚本来运行所有分子:( comp1是化合物1的缩写)

#!/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

问题是我得到一个列表,我无法轻易识别哪些要删除,因为某些分子出现在输出打印的左右两侧。有没有什么方法可以得到一个分子列表(每个类似对中的一个),所以我可以删除它们仍然保持独特的分子。我需要这个用于我的研究工作,在这方面将非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

如果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表达式放在循环之外并删除import DiffMatchPatch from 'diff-match-patch' const dmp = new DiffMatchPatch() const diff = dmp.diff_main('dogs bark', 'cats bark', null, null) this.foo = diff 行,然后看看它是否没有问题。