我是化学家和普通的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
问题是我得到一个列表,我无法轻易识别哪些要删除,因为某些分子出现在输出打印的左右两侧。有没有什么方法可以得到一个分子列表(每个类似对中的一个),所以我可以删除它们仍然保持独特的分子。我需要这个用于我的研究工作,在这方面将非常感谢帮助。
答案 0 :(得分:1)
如果A
与B
相同且B
与C
相同,我认为您希望B
和C
成为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
行,然后看看它是否没有问题。