Bash

cat輸出儲存為佔位符

  • October 2, 2019

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

是的,在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或類似名稱。

引用自:https://unix.stackexchange.com/questions/544732