我有一组具有以下扩展名的文件
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/