For 루프는 두 개의 변수를 사용하여 파일을 연결합니다.

For 루프는 두 개의 변수를 사용하여 파일을 연결합니다.

나는 일반적으로 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

관련 정보