2017-06-05 26 views
0

いくつかのパラメータを必要とするコマンドラインスクリプトを実行したいとします。具体的に:入力パラメータに複数の入力ストリームを使用するにはどうすればよいですか?

perlのprinseq-lite.pl -fastq file1.fq.gz -fastq2 file2.fq.gz

\ -out_good goodfile.out -out_bad badfile.out -log prin.log

\ -ns_max_n 5 ... more_params ...問題は、解凍したファイルのサイズが非常に大きく、このコマンドであるため、ファイルは、zip圧縮され、最初に解凍し、それらを保存せずに処理しなければならないということである

多数のファイルに対して実行されます。

私がする必要があるのは、オンザフライで入力を解凍することです。以前は、ユーザーl0b0は、複数の入力ストリームが解決策である可能性があることを示唆していました。私は以下を試しましたが、入力ファイルが空であるとプログラムが主張しているので空の入力ストリームをここに渡しているようです。

パールprinseq-lite.pl -fastq <(ZCAT f1.gz)-fastq2 <(ZCAT f2.gz)...

パールprinseq-lite.pl -fastq 1 < <(ZCAT f1.gz)-fastq2 2 < <(ZCATのf2.gz)...

だから私は何をする必要があるか、要するに、このプログラムへの複数のパラメータのために解凍した入力を提供しています。

誰かがこれを行う適切な方法を教えてもらえますか、私の現在の試みで間違っていることはありますか?あなたのご意見を事前におねがいします。

+1

※空欄であることは間違いありません。しかし、彼らが何をするかは、*探求できない*。あなたの 'prinseq-lite.pl'がファイル内を探したり、複数回読むことができるようにする必要があるなら、*それは問題になります。 –

+1

...この質問にうまく答えるためには、実際にあなたの特定のPerlスクリプトの内容についてもっと実際に調べる必要があります。 –

+0

(同様に、あなたのプログラムが入力ファイルの長さを読み取ってステータス情報を提供しようとしている場合、*も失敗します;空であると同じことを扱うことができます)。 –

答えて

0

まあ、私は最も簡単には、コマンドでそれらの名前のパイプを使用し、gzunipの出力のための名前付きパイプを作成するかもしれないと思う。そして、

mkfifo file1.fq file2.fq file3.fq ... 
gunzip -c file1.fq.gz > file1.fq & 
gunzip -c file2.fq.gz > file2.fq & 
gunzip -c file3.fq.gz > file3.fq & 

ファイル名として、これらのパイプを使用してプログラムを呼び出します。

perl prinseq-lite.pl -fastq file1.fq -fastq2 file2.fq -fastq3 file3.fq ... 
+2

'<(...)'がうまくいかない場合、名前付きパイプが動作すると驚いています。多くのプラットフォームでは、プロセス置換*はシェルによって名前付きパイプに置き換えられます。匿名パイプを指す '/ dev/fd/10'のようなものですが、匿名パイプへの'/dev/fd'ポインタでプログラムを失敗させるような制限の大部分は、それはあまりにも名前付きパイプで失敗します。 –

+0

名前付きパイプを使用しないと、ファイルを解凍して解凍したファイルをプログラムに提供したのと全く同じファイルシステムにファイルを解凍しますか? –

+0

いいえ、@AdamPrice、実際にファイルシステムに書き込むわけではありません。それはすべて記憶にあります。 – Jack

関連する問題