【发布时间】:2020-08-08 07:27:16
【问题描述】:
我一直在使用 bash 生成分析命令列表,如下所示:
while read sample control; do echo analysis --target $sample --control $control --output /path/to/results/$sample/'$sample'_output.txt >> /path/to/commands/commands.txt ; done < sample_list.txt
输入文件 sample_list.txt 如下所示
sample_A control_A
sample_B control_B
但是,我想让一些事情变得更复杂,在这些命令中,我在数据子集上运行它以并行化分析,使其运行得更快。我可以通过添加一个选项“--interval-list”并提供总数据的一个子集进行分析来做到这一点。但我不知道谁以有效的方式将其与示例列表一起循环。
我想象的结束命令是这样的:
while read sample control regions; do echo analysis --target $sample --control $control --interval-list $regions --output /path/to/results/$sample/'$sample'_'$regions'_output.txt >> /path/to/commands/commands.txt ; done < sample_list.txt
例如,对于前 2 组示例,我现在希望输出 20 个命令而不是 2 个。使用这些变量:
sample_A control_A Region_1
sample_A control_A Region_2
sample_A control_A Region_3
sample_A control_A Region_4
sample_A control_A Region_5
sample_A control_A Region_6
sample_A control_A Region_7
sample_A control_A Region_8
sample_A control_A Region_9
sample_A control_A Region_10
sample_B control_B Region_1
sample_B control_B Region_2
sample_B control_B Region_3
sample_B control_B Region_4
sample_B control_B Region_5
sample_B control_B Region_6
sample_B control_B Region_7
sample_B control_B Region_8
sample_B control_B Region_9
sample_B control_B Region_10
一个示例输出行是:
analysis --target sample_A --control control_A --interval-list Region_1 --output /path/to/results/sample_A/sample_A_Region_1_output.txt
我可以将上面的行放入 sample_list.txt 文件中,但这会破坏有效循环的要点。我想我需要一个 sample_list.txt 文件和一个单独的 region.txt 文件作为 --interval-list 变量的输入,因此如果有意义的话,它可以循环遍历 sample_list.txt 文件中每一行的 10 个区域。有点像循环中的循环。
但我不知道如何以一种比手动写出所有组合更容易的方式将 region.txt 文件放入其中。
regions.txt 文件的输入如下:
Region_1
Region_2
Region_3
Region_4
Region_5
Region_6
Region_7
Region_8
Region_9
Region_10
非常感谢您的任何建议。
【问题讨论】:
标签: bash loops while-loop parallel-processing nested