複数のfastqファイルを関連付ける

複数のfastqファイルを関連付ける

ほぼ 100 個のファイルを含むフォルダがあり、各グループには 16 個のファイルがあります。 16個のファイルで構成される各グループを1つのファイルにリンクする必要があります。たとえば、ファイル名のセットは次のようになります。

randomString_$groupName- 

Nextseq500で実行され、一本鎖である100本に近いサンプルを含むフォルダがあります。各サンプルは、4つのレーンを持つNextseq500の4つのフローセルで実行されました。したがって、サンプルごとに16個のfastqファイルが生成されます(下記の例を参照)。さて、これらすべてのファイルをリンクし、次の名前の出力を生成したいと思います。102697-001-001_R1.fastq.gz

HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz

HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz

HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz

HJJMYBGXX_102697-001-001_ATTACTCG-GCCTCTAT_L001_R1.fastq.gz
HJJMYBGXX_102697-001-001_ATTACTCG-GCCTCTAT_L002_R1.fastq.gz
HJJMYBGXX_102697-001-001_ATTACTCG-GCCTCTAT_L003_R1.fastq.gz
HJJMYBGXX_102697-001-001_ATTACTCG-GCCTCTAT_L004_R1.fastq.gz

上記のすべてのファイルは、名前付きの1つのファイルにリンクする必要があります102697-001-001_R1.fastq.gz(したがって、2つのファイル間の文字列を名前_のままにしてください)。_

私は試した:

$ cat HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz \
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz \
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz \
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz \
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz \
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz \
HGTLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz \
HGVLWBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L001_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L002_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L003_R1.fastq.gz \
HGWWHBGXX_102697-001-001_ATTACTCG-AGGCTATA_L004_R1.fastq.gz > 102697_001_001_R1.fastq.gz

うまくいきますが、ファイルが多いので手動で実行したくありません。

ベストアンサー1

for name in ./*.fastq.gz; do
    rnum=${name##*_}
    rnum=${rnum%%.*}

    sample=${name#*_}
    sample=${sample%%_*}

    cat "$name" >>"${sample}_$rnum.fastq.gz"
done

これは現在のディレクトリのすべての圧縮されたFastqファイルを繰り返し、サンプル名をシェル変数として抽出しますsample。質問に表示されるすべてのファイル名は102697-001-001

この変数はファイル名の末尾にあるビットをrnum保持します。R#

ファイル名を取得し、最初の文字の前のすべての項目を削除し、最初の文字の後のすべての項目を削除し、結果から最初の文字を含むサンプル名を_抽出_します。rnum同様に変数の値を抽出します。

次に、このファイルはcat >>。出力ファイル名はR#サンプル名と文字列で構成されています.fastq.gz。表示されたファイルの場合、これは102697-001-001_R1.fastq.gz

Gzip圧縮ファイルは、接続するために解凍する必要はありません。結果ファイルを解凍すると、すべてのFastqファイルが非圧縮接続として提供されます。


bash正規表現を使用して出力ファイル名を計算する別の方法は次のとおりです。

for name in ./*.fastq.gz; do
    if [[ "$name" =~ _([0-9-]+)_.*(..)\.fastq\.gz ]]; then
        outfile="${BASH_REMATCH[1]}_${BASH_REMATCH[2]}.fastq.gz"

        cat "$name" >>"$outfile"
    fi
done

ファイル名が正規表現と一致します。

_([0-9-]+)_.*(..)\.fastq\.gz

これら2つのグループ(括弧内のビット)は、ファイル名の関連部分を選択します。最初のグループは文字列をキャプチャします。ただ数字またはダッシュ文字で構成されます。グループは_両側に囲まれなければなりません。ファイル名内のこのビットが一致する唯一の場所はサンプル名です。

最初のグループと_後続のグループの後には、.*そのビットまでの任意の文字()を許可します(..)\.fastq\.gz。ファイル名の末尾にある文字列\.fastq\.gzと一致するため、最後のグループは直前の文字列をキャプチャします(パターンは任意の文字と一致しますが点と一致します)。.fastq.gz(..)R1.\.

キャプチャされた2つのグループは、配列にインデックス1と2 BASH_REMATCH(名前は「Bash正規表現一致」の略)として格納され、それを使用して出力ファイル名を設定します。

おすすめ記事