bash - 循环两组文件

标签 bash loops for-loop awk

我有一组具有以下扩展名的文件

  A.fa
  A_cod.fa
  B.fa
  B_cod.fa
  C.fa
  C_cod.fa
  D.fa
  D_cod.fa

对于每个文件,我必须这样做

 prank -convert -d=A.fa -dna=A_cod.fa -o=A.alignment -keep

我想循环遍历这组文件并执行上述操作而不是每个文件并尝试:

  for f in *.fa and for f1 in *_cod.fa; do prank -convert -d=$f -dna=$f1 -o=$f.alignment -keep; done ;

但这不起作用。因此,对于每个文件 A,-d 应该读取 .fa 文件,-dna 应该读取相应的 _cod.fa 文件,B 也同样如此。

最佳答案

由于每个 .fa 文件都有一个 _cod.fa 文件,因此我们可以使用单个 Bash 循环来完成此操作:

#!/bin/bash
for f in *.fa; do
  [[ "${f/*_/}" = "cod.fa" ]] && continue # skip *_cod.fa files
  cod_file="${f//.fa}_cod.fa"
  [[ ! -f "$cod_file" ]] && continue      # _cod.fa doesn't exist
  prank -convert -d="$f" -dna="$cod_file" -o="$f.alignment" -keep
done

关于bash - 循环两组文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42987049/

相关文章:

用 WSL 替换 Bash 进程

linux - RRD 不适用于 shell 脚本

php - 如何为多个 plupload 制作循环

arrays - "circle"中的遍历矩阵

performance - 矢量化代码比循环慢?软件

python - 如何修复 python 中的 for 循环输出

python - 如何在 bash/Python/Fabric/sh 脚本中使用 pew?

c++ - 如何从 bash 更改库包含二进制文件的路径?

java - 对于循环变量数学不计算(z/loopLength *100)

c - 在 C 中看起来像三角形的输出