如何在shell脚本中为一个命令指定多个输入

如何在shell脚本中为一个命令指定多个输入

我每个样本有几个 fastq 文件,所有这些文件都应该作为输入立即提供(因为它们都属于一个样本,所以不应该像 for 循环一样独立对待它们,因为它们是一个样本的输入,所以应该是一起治疗)。

这是一个简单的例子,s1 样本只有三个 fastq 文件:

NanoPlot -t 2 --fastq s1.reads1.fastq.gz s1.reads2.fastq.gz s1.reads3.fastq.g --maxlength 40000 --plots hex dot

现在假设我有超过 100 个用于 s1 的 fastq 文件,如何修改命令以将它们全部作为输入?

答案1

所以我的建议是提供一个文件名作为参数NanoPlot,包含 FASTQ 文件列表,并相应地处理程序中的列表,例如

NanoPlot -t 2 --fastq fastq_files.list --maxlength 40000 --plots hex dot

内容fastq_files.list如下:

s1.reads1.fastq.gz
s1.reads2.fastq.gz 
s1.reads3.fastq.gz
...etc

答案2

如果这适用于NanoPlot

NanoPlot -t 2 --fastq s1.reads1.fastq.gz s1.reads2.fastq.gz s1.reads3.fastq.gz --maxlength 40000 --plots hex dot

并且您想要传递以 开头s1.和结尾的所有文件名.fastq.gz,那么一个简单的 shell glob 也应该可以做到这一点:

NanoPlot -t 2 --fastq s1.*.fastq.gz --maxlength 40000 --plots hex dot

shell 应按通常的字典顺序对文件名进行排序,因此数字按1< 10< 11<2等排序,因此请注意这一点是否重要。

如果你想让程序看到单身的文件包含所有此类文件中的数据,那么您可以使用进程替换(在 Bash/ksh/zsh 中)来cat执行此操作:

NanoPlot -t 2 --fastq <(cat s1.*.fastq.gz) --maxlength 40000 --plots hex dot

相关内容