「cat」出力をプレースホルダとして保存

「cat」出力をプレースホルダとして保存

というプログラムを使っています。ミニマップ読み取りを参照ゲノムにソートするために使用されます(計算生物学の問題)。このプログラムは、位置引数として2つのファイルを入力する必要があります。まず、形式の参照.fastaと形式の読み取り結果ファイルですfastq

問題は、fastqファイルが複数あることです。 1つのオプションは、cat *.fastq > cat_all.fastqまず呼び出しを使用してすべてを接続することです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シェルで使用できますプロセスの交換:

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

これは<( ... )プロセスの置き換えです。/dev/fd/XXX読み取り時にコマンド出力が生成される名前付きパイプ(と同様)のパス名に置き換えられます。プロセス置換コマンドの出力はディスクに保存されません。

ツールminimapがfastqデータから前後に移動する必要がなく、順次読み取る限り、これは機能します。

shプロセスを置き換えることなくこれを行うことができます(これはすべてのPOSIXシェルでも機能します)。

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または同様の名前を指定するだけです。

関連情報