我正在尝试执行一个需要两个输入文件的命令,这两个文件都特定于每个样本。我的解决方案是使用两个 for 循环:
FILES=testgroup/*split.bam
TARGETS=testgroup/*intervals
for f in $FILES
do
for t in $TARGETS
do
IndelRealigner -Input1 $f Input2 $t Output $f.realigned.bam
done
done
但是当我在第二个 for 循环 ($t) 上执行这个 bash 循环时,第一个是常量,然后重复循环。
我需要同时循环输入(即 $f Sample1 和 $t Sample1、$f Sample2 和 $t Sample2)。
谢谢你的帮助。
编辑:
示例示例名称和相关的输入文件:
D8.1.112.fastqAligned.out.sam.rg_added_sorted.bam.dedup.bam.split.bam D8.1.112.fastqAligned.out.sam.rg_added_sorted.bam.dedup.bam.split.bam.intervals
同时,我已将两组文件移动到一个新目录中,以查看是否可以在单个数组中指定两个组?我不知道如何做到这一点。迄今为止:
files=testgroup/newdir
for f in $files
do
for t in $files
do
IndelRealigner -Input1 $f Input2 $t Output $f.realigned.bam
done
done
任何进一步的帮助表示赞赏!
一种可能的解决方案:首先将文件和目标读入数组。然后使用一个循环同时迭代两个数组:
#!/bin/bash
files=($(ls testgroup/*split.bam))
targets=($(ls testgroup/*intervals))
len=${#files[@]}
for ((i=0;i<$len;i++))
do
IndelRealigner -Input1 "${files[$i]}" Input2 "${targets[$i]}" Output "${files[$i]}".realigned.bam
done
但请记住:只有当目标与文件一样多时,这才有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句