Forループは2つの変数を使用してファイルを連結します。

Forループは2つの変数を使用してファイルを連結します。

私は一般的にLinuxに初めてアクセスし、誰かが私を助けることができることを願っていました。

4つの異なるシーケンスレーンでfastq.gzファイルをマージしたいと思います。各ファイルには次の名前があります。サンプル名、レーン(1〜4)参照、順方向または逆GC082_F4.lane1.1901.R1.fastq.gz方向読み取り参照(「R1」は逆方向、「R2」は順方向)。GC082_F4laneXR1

サンプルごとに4つの異なるチャンネルのファイルをリンクし、それぞれ順方向読み取り(R1)と逆方向読み取り(R2)に使用したいと思います。したがって、この特定の例では次のようになります。

渡される内容は次のとおりです。

cat GC082_F4.lane1.1901.R1.fastq.gz \
  GC082_F4.lane2.1901.R1.fastq.gz GC082_F4.lane3.1901.R1.fastq.gz \
  GC082_F4.lane4.1901.R1.fastq.gz > GC082_F4.R1.fastq.gz

逆さまに読んでください:

cat GC082_F4.lane1.1901.R2.fastq.gz \
  GC082_F4.lane2.1901.R2.fastq.gz GC082_F4.lane3.1901.R2.fastq.gz \
  GC082_F4.lane4.1901.R2.fastq.gz > GC082_F4.R2.fastq.gz

しかし、+100個のサンプルに対してこれを行う必要があるので、これを達成するためにループを使用できるかどうか疑問に思います。

よろしくお願いします!

ベストアンサー1

ファイルの一意の部分を識別して分類します。

cat GC082_F4.*.R1.fastq.gz > GC082_F4_R1.fastq.gz
cat GC082_F4.*.R2.fastq.gz > GC082_F4_R2.fastq.gz

したがって、サンプルが複数ある場合は、次のことができます。

for sample in GC082_F4 GC083_F4 GC084_F4 GC085_F4 ... GC0NN_F4; do
    cat "$sample".*.R1.fastq.gz > "$sample"_R1.fastq.gz
    cat "$sample".*.R2.fastq.gz > "$sample"_R2.fastq.gz
done

例名のリストを入力として提供することもできます。

while read sample; do
    cat "$sample".*.R1.fastq.gz > "$sample"_R1.fastq.gz
    cat "$sample".*.R2.fastq.gz > "$sample"_R2.fastq.gz
done < sample.names.txt

おすすめ記事