【发布时间】:2019-01-28 14:08:41
【问题描述】:
我需要为多个文件组合运行一个命令。该命令如下所示:
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"
如何运行它以确保 TARGET_SAMPLE 和 NORMAL_SAMPLE 始终正确匹配?对于每个 NORMAL_SAMPLE,我需要使用两个不同的 TARGET_SAMPLE 文件运行脚本两次。我认为使用数组可以工作,但我不知道如何正确地将其输入到 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
感谢您的帮助。
【问题讨论】:
-
您可以使用一对数组(即目标和法线),其中对在两个数组中占据相同的位置。
-
那么这会涉及到两个循环遍历每个数组吗?
-
很难说你的代码有什么问题,因为你没有提供它或者你遇到的错误。另见How to create a Minimal, Complete, and Verifiable example。 bash shell nested for loop 的可能重复项
-
我对此没有任何错误,因为我不知道如何创建一个将特定变量配对在一起的 for 循环,而不仅仅是循环一组变量或所有可能的组合。我不认为它是一个简单的嵌套循环,因为我有一个应该一起运行的 TARGET_SAMPLE 和 NORMAL_SAMPLE 可能组合的硬编码列表。
-
不,只有一个循环。说
normal=(n1 n3 n3)和target=(t2 t3 t4)。两个数组都有三个元素。只要您保持您感兴趣的顺序,您就可以使用变量n从 0 循环到长度(正常)并使用${normal[n]}和${target[n]}作为参数。
标签: arrays linux bash for-loop