我正在使用一个名为小地图用于将读取结果与参考基因组对齐(计算生物学问题)。此程序需要输入两个文件作为位置参数:首先是格式为的参考,.fasta
然后是格式为的读取结果文件fastq
。
问题是我有多个fastq
文件。一种选择是首先使用cat *.fastq > cat_all.fastq
then 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
是的,在bash
shell 中您可以使用流程替代:
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
或类似名称即可。