Bash x、y和z坐标的组合(存储在三个不同的文件中)
我正在编写一个bash脚本,用于自动盲对接(查找蛋白质中的结合位点)。为此,我将一个大的3D网格划分为更小的重叠网格 我创建了三个文件,分别包含子栅格中心的x、y和z坐标。换句话说,一个文件包含所有可能的x坐标(每行一个),第二个文件包含所有的y坐标,第三个文件包含所有的z坐标。坐标有三位小数,可以是正的,也可以是负的 现在我想找出x,y和z的所有可能组合。对于每个组合,我想创建一个文件夹(称为x1y1z1、x1y2z1、x1y3z1等),其中包含一个文本文件,其中包含对应于该特定组合的x、y和z坐标 我已经找到了使用Python解决相关问题的方法。但是,由于我不熟悉Python,而且我已经有了一个定义了很多变量的大型bash脚本,我想知道是否有一种简单的方法可以在bash或任何其他语言中实现这一点,我可以轻松地将其集成到现有的bash脚本中 亲切问候, 米罗 更新: 这是Matt D指出的解决方案的改编版本(非常感谢): 这样做的原因是,我最终以以下方式格式化了我的centreX.tmp文件:Bash x、y和z坐标的组合(存储在三个不同的文件中),bash,coordinates,permutation,combinations,Bash,Coordinates,Permutation,Combinations,我正在编写一个bash脚本,用于自动盲对接(查找蛋白质中的结合位点)。为此,我将一个大的3D网格划分为更小的重叠网格 我创建了三个文件,分别包含子栅格中心的x、y和z坐标。换句话说,一个文件包含所有可能的x坐标(每行一个),第二个文件包含所有的y坐标,第三个文件包含所有的z坐标。坐标有三位小数,可以是正的,也可以是负的 现在我想找出x,y和z的所有可能组合。对于每个组合,我想创建一个文件夹(称为x1y1z1、x1y2z1、x1y3z1等),其中包含一个文本文件,其中包含对应于该特定组合的x、y和
x00=-15.349
x01=-10.349
x02=-5.349
...
这允许我根据等号(x01y23z09)前的区块命名文件夹,然后创建包含实际坐标的文件。如果需要所有内容的组合,这将是一个三重嵌套循环
#!/bin/bash
for x in $(cat xfile) ; do
for y in $(cat yfile) ; do
for z in $(cat zfile) ; do
filename="$x$y$z"
mkdir $filename
# makes a file called xyz in dir xyz with contents "xyz"
echo $filename > $filename/$filename
done
done
done
编辑:此表单将使用读取
(尚未测试)
#/bin/bash
读x时;做
在阅读的时候,你会感到困惑;做
读z时;做
filename=“$x$y$z”
mkdir$filename
#在目录xyz中生成一个名为xyz的文件,其内容为“xyz”
echo$filename>$filename/$filename
完成
非常好的解决方案,谢谢。不幸的是,我是新来的,我没有足够的“声誉”投票给你的答案。我已经编辑了我的原始问题,添加了适合我问题的解决方案,以防有人发现它有用。嗨,弗雷德里克,谢谢你的提示。出于好奇,在这种情况下使用“while”有什么好处?我相信read
一次可以从文件中获得一行<另一方面,code>cat将读取整个文件,然后再允许您在其上循环。因此,read
从文件中开始获取记录所需的时间更少。此外,你可以通过点击复选标记来“接受”答案(并且你可以用大拇指点击你发布的问题的答案)。while版本确实有效,而且速度更快。再次感谢。
#!/bin/bash
for x in $(cat xfile) ; do
for y in $(cat yfile) ; do
for z in $(cat zfile) ; do
filename="$x$y$z"
mkdir $filename
# makes a file called xyz in dir xyz with contents "xyz"
echo $filename > $filename/$filename
done
done
done
#!/bin/bash
while read x ; do
while read y ; do
while read z ; do
filename="$x$y$z"
mkdir $filename
# makes a file called xyz in dir xyz with contents "xyz"
echo $filename > $filename/$filename
done < zfile
done < yfile
done < xfile