將cat
輸出儲存為佔位符
我正在使用一個名為minimap的程序將讀取與參考基因組對齊(計算生物學問題)。該程序需要兩個文件作為位置參數作為輸入:首先是
.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
是的,在
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
或類似名稱。