Arrays 如何在linux中使用多变量for循环

Arrays 如何在linux中使用多变量for循环,arrays,linux,bash,for-loop,Arrays,Linux,Bash,For Loop,我有一个命令需要为多个文件组合运行。该命令如下所示: myscript.pl -output_directory /path/output_"$TARGET_SAMPLE"_vs_"$NORMAL_SAMPLE" -target_sample /path/$TARGET_SAMPLE.bam -normal_sample /path/$NORMAL_SAMPLE.bam export TARGET_SAMPLE="sample_1" export NORMAL_SAMPLE="sample_2

我有一个命令需要为多个文件组合运行。该命令如下所示:

myscript.pl -output_directory /path/output_"$TARGET_SAMPLE"_vs_"$NORMAL_SAMPLE" -target_sample /path/$TARGET_SAMPLE.bam -normal_sample /path/$NORMAL_SAMPLE.bam
export TARGET_SAMPLE="sample_1"
export NORMAL_SAMPLE="sample_2"
我希望对多组样本运行此操作,而无需每次手动更改路径。现在,我在手动运行之前设置了示例,如下所示:

myscript.pl -output_directory /path/output_"$TARGET_SAMPLE"_vs_"$NORMAL_SAMPLE" -target_sample /path/$TARGET_SAMPLE.bam -normal_sample /path/$NORMAL_SAMPLE.bam
export TARGET_SAMPLE="sample_1"
export NORMAL_SAMPLE="sample_2"
如何运行此操作以确保目标样本和正常样本始终正确匹配?对于每个普通的示例,我需要使用两个不同的目标示例文件运行两次脚本。我认为使用数组可以工作,但我不知道如何正确地将其输入for循环

下面是一些我需要运行的配对示例:

export TARGET_SAMPLE="sample_1"
export NORMAL_SAMPLE="sample_2"

export TARGET_SAMPLE="sample_3"
export NORMAL_SAMPLE="sample_2"

export TARGET_SAMPLE="sample_4"
export NORMAL_SAMPLE="sample_5"

export TARGET_SAMPLE="sample_6"
export NORMAL_SAMPLE="sample_5"
因此,此组合列表的第一个示例输出是在shell中提交这些命令:

myscript.pl -output_directory /path/output_sample_1_vs_sample_2 -target_sample /path/sample_1.bam -normal_sample /path/sample_2.bam
第二个问题是:

myscript.pl -output_directory /path/output_sample_3_vs_sample_2 -target_sample /path/sample_3.bam -normal_sample /path/sample_2.bam

感谢您的帮助。

方法1使用while循环从here文档读取多个值:

export TARGET_SAMPLE NORMAL_SAMPLE

# special characters in the values (eg. space) will cause problems
while read TARGET_SAMPLE NORMAL_SAMPLE ANYTHING_ELSE; do
    # insert sanity checks here
    myscript.pl -output_directory /path/output_"$TARGET_SAMPLE"_vs_"$NORMAL_SAMPLE" -target_sample /path/$TARGET_SAMPLE.bam -normal_sample /path/$NORMAL_SAMPLE.bam
done <<'EOD'
sample_1 sample_2
sample_3 sample_2
sample_4 sample_5
sample_6 sample_5
EOD
方法3:在多个阵列上使用for循环:


Bash对数组变量进行了索引,因此可以使用for循环,但保持数组同步容易出错,因此我不建议使用。

可以使用两个数组,即target和normal,两个数组中的对占据相同的位置。那么这会涉及到两个for循环通过每个数组吗?很难说是什么代码错误,因为您没有提供代码或遇到错误。另见。我没有任何错误,因为我不知道如何创建一个for循环,将特定的变量配对在一起,而不仅仅是通过单个变量集或所有可能的组合循环。我不认为它是一个简单的嵌套循环,因为我有一个硬编码列表,其中列出了目标样本和正常样本的可能组合,应该一起运行。不,只有一个循环。假设正常=n1 n3 n3,目标=t2 t3 t4。两个数组都有三个元素。只要保持感兴趣的顺序,就可以使用从0到lengthnormal的变量n循环,并使用${normal[n]}和${target[n]}作为parameters.cat文件|在读取时。。。读的时候写的更好;做done