Bash x、y和z坐标的组合(存储在三个不同的文件中)

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和

我正在编写一个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文件:

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