将“cat”输出存储为占位符

将“cat”输出存储为占位符

我正在使用一个名为小地图用于将读取结果与参考基因组对齐(计算生物学问题)。此程序需要输入两个文件作为位置参数:首先是格式为的参考,.fasta然后是格式为的读取结果文件fastq

问题是我有多个fastq文件。一种选择是首先使用cat *.fastq > cat_all.fastqthen call将它们全部连接起来minimap。但我想将它们全部连接起来并将该文件通过管道传输到minimap,而不将其保存到cat_all.fastq,这样我就不会浪费存储空间。

有没有一种方法可以将cat输出存储为占位符(而不保存它),然后通过管道传输到minimap类似的东西?

cat *.fastq | minimap2 -ax map-ont /path/to/a/file.fasta {placeholder_for_the_cat_command} > output_file.sam

minimap下面是我如何调用名为 的单个(串联)文件的示例PD180425_cat_all.fastq

minimap2 -ax map-ont /path/to/a/file.fasta PD180425_cat_all.fastq > PD180425_aligned_minimap.sam

答案1

是的,在bashshell 中您可以使用流程替代:

minimap -ax map-ont /path/to/fasta.file <( cat *.fastq ) >output.sam

<( ... )是一个过程替代。它将被替换为命名管道的路径名(类似于/dev/fd/XXX),该管道在读取时将在其中生成命令的输出。进程替换中命令的输出不存储在磁盘上。

只要该minimap工具不需要在 fastq 数据中来回跳转,而只是按顺序读取它,这可能会起作用。

无需进程替换即可执行此操作(这也适用于sh任何 POSIX shell):

mkfifo fastq_data
cat *.fastq >fastq_data &
minimap -ax map-ont /path/to/fasta.file fastq_data >output.sam
rm fastq_data

这与第一个命令的作用几乎相同。它创建一个命名管道并将 fastq 数据连接到其中(它cat作为后台作业运行,直到它的所有输出被 读取minimap,然后终止)。minimap然后使用命名管道调用该工具来获取 fastq 数据。完成后,命名管道将被删除。

fastq_data管道读取意味着直接从cat命令读取,而不是从某个临时文件读取。同样,结果cat永远不会存储在磁盘上。

如果该minimap工具出于某种原因需要具有特定文件名后缀的 fastq 文件,这可能是最佳选择。只需将您的命名管道命名为data.fastq或类似名称即可。

相关内容