2つのgzファイルを特定の名前の新しい出力ファイルにマージする方法

2つのgzファイルを特定の名前の新しい出力ファイルにマージする方法

24 個のサンプルから 96 個の *fastqc.gz 生の読み取りファイルがあります。各サンプルは、対当たり2つのレーンで配列決定した。

両方のチャンネルの各ペアから読み取った内容を、サンプルファイル名(2271_merged_R1_001.fastq.gz)と同じ名前識別子を持つ1つの出力ファイルにマージしたいと思います。

File names are in this order:
22[71-94]*R[1-2]_001.fastq.gz;

**2271**_ID890_1_S1_L001_**R1_001.fastq.gz**
**2271**_ID890_1_S1_L002_**R1_001.fastq.gz**

**2271**_ID890_1_S1_L001_**R2_001.fastq.gz**
**2271**_ID890_1_S1_L002_**R2_001.fastq.gz**

次のような短いスクリプトを試しましたが、2つの出力ファイル(最初と最後)のみが生成されました。

R1ファイルの場合

  for rf in 22[71-94]*R1_001.fastq.gz; do zcat $rf > 22"${71-94}"_merged_R1_001.fastq.gz ; done

R2ファイルの場合

for rf in 22[71-94]*R2_001.fastq.gz; do zcat $rf > 22"${71-94}"_merged_R2_001.fastq.gz ; done

私の質問は次のとおりです。 1. なぜ 2 つの出力ファイルのみが生成されるのですか? 2.出力ファイルの読み取り数は、2つのチャネルのマ​​ージされたファイルの合計ではありません。 3. 各読み取りタイプに対して 2 回実行するのではなく、1 つのステップで 2 つのチャネル (R1 および R2) の読み取りをマージする良い方法はありますか?

コードには何の問題がありますか?出力ファイルが完全にマージされたことをどのように確認できますか?

ありがとう

ベストアンサー1

まず、22[71-94]*R1_001.fastq.gzそれはあなたが考えるまで拡張されません。

これはうまくいきます22[1-9]*R1_001.fastq.gz。ここで、[71-94]は、「7 OR 1 to 9 OR 4」が「1 to 9」に縮小される文字群である。

22{71..94}*R1_001.fastq.gz探している拡張子である可能性が高いですが、zcatファイルをリンクするのではなく、見つかった各ファイルに対してループが一度実行されます。実際、各ファイルは同じ出力ファイルにR1順次書き込まれ、前の書き込みが上書きされます。zcat

私はこれがあなたの家に従って実際に探していると信じています(下記参照)。

for num in {71..94}; do zcat 22"$num"*R1_{L001,L002}.fastq.gz > "22${num}_merged_R1_001.fastq" ; done

仮定:結果を解凍したいので、.gzそれを結果ファイルから削除しました(Patrickが指摘したように)。
それ以外の場合は、結果ファイルzcatに変更して再度cat追加します。.gz

おすすめ記事