![서로 다른 레인에서 생성된 RNA-seq 파일을 결합하는 방법](https://linux55.com/image/131160/%EC%84%9C%EB%A1%9C%20%EB%8B%A4%EB%A5%B8%20%EB%A0%88%EC%9D%B8%EC%97%90%EC%84%9C%20%EC%83%9D%EC%84%B1%EB%90%9C%20RNA-seq%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B2%B0%ED%95%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 다른 레인에서 매우 큰 RNA-seq 파일을 생성했습니다. 아래와 같이 일부 파일 이름을 추출했습니다.
MC9_FNEN_638A_S19_L008_R1_001.fastq.gz
MC9_FNEN_638A_S19_L008_R2_001.fastq.gz
MC9_FNEN_638A_S9_L001_R1_001.fastq.gz
MC9_FNEN_638A_S9_L001_R2_001.fastq.gz
MC9_FNEN_638A_S9_L002_R1_001.fastq.gz
MC9_FREN_638A_S9_L002_R2_001.fastq.gz
MC9_FREN_638A_S9_L006_R1_001.fastq.gz
MC9_FREN_638A_S9_L006_R2_001.fastq.gz
MC9_FREN_638A_S9_L008_R1_001.fastq.gz
MC9_FREN_638A_S9_L008_R2_001.fastq.gz
MC9_ZH_637A_S74_L001_R1_001.fastq.gz
MC9_ZH_637A_S74_L001_R2_001.fastq.gz
MC9_ZH_637A_S74_L003_R1_001.fastq.gz
MC9_ZH_637A_S74_L003_R2_001.fastq.gz
MC9_ZH_637A_S74_L007_R1_001.fastq.gz
MC9_ZH_637A_S74_L007_R2_001.fastq.gz
MC9_ZH_637A_S74_L008_R1_001.fastq.gz
MC9_ZH_637A_S74_L008_R2_001.fastq.gz
MC9_ZH_637A_S84_L008_R1_001.fastq.gz
MC9_ZH_637A_S84_L008_R2_001.fastq.gz
DR14_DCRP_479C_S50_L001_R1_001.fastq.gz
DR14_DCRP_479C_S50_L001_R2_001.fastq.gz
DR14_DCRP_479C_S50_L002_R1_001.fastq.gz
DR14_DCRP_479C_S50_L002_R2_001.fastq.gz
DR14_DCRP_479C_S50_L006_R1_001.fastq.gz
DR14_DCRP_479C_S50_L006_R2_001.fastq.gz
DR14_DCRP_479C_S50_L007_R1_001.fastq.gz
DR14_DCRP_479C_S50_L007_R2_001.fastq.gz
DR14_DCRP_479C_S50_L008_R1_001.fastq.gz
DR14_DCRP_479C_S50_L008_R2_001.fastq.gz
정방향 및 역방향 읽기를 위해 서로 다른 채널에서 생성된 모든 시퀀스를 연결하고 싶습니다. 예를 들어 처음 10줄은 동일한 동물과 특정 조직의 시퀀스 파일입니다( MC9_FREN
). XXXXX_R1_001.fastq.gz
다른 채널에서 생성된 모든 정방향 읽기를 연결하고 파일 이름 MC9_FREN_R1.fastq.gz
과 모든 역방향 XXXX_R2_001.fastq.gz
읽기를 저장하고 싶습니다. MC9_FREN_R2.fastq.gz
cat MC9_FREN_638A_S19_L008_R1_001.fastq.gz MC9_FREN_638A_S9_L001_R1_001.fastq.gz MC9_FREN_638A_S9_L002_R1_001.fastq.gz MC9_FREN_638A_S9_L007_R1_001.fastq.gz MC9_FREN_638A_S9_L008_R1_001.fastq.gz > MC9_FREN_R1.fastq.gz
cat MC9_FREN_638A_S19_L008_R2_001.fastq.gz MC9_FREN_638A_S9_L001_R2_001.fastq.gz MC9_FREN_638A_S9_L002_R2_001.fastq.gz MC9_FREN_638A_S9_L007_R2_001.fastq.gz MC9_FREN_638A_S9_L008_R2_001.fastq.gz > MC9_FREN_R2.fastq.gz
cat MC9_ZH_637A_S74_L001_R1_001.fastq.gz MC9_ZH_637A_S74_L003_R1_001.fastq.gz MC9_ZH_637A_S74_L007_R1_001.fastq.gz MC9_ZH_637A_S74_L008_R1_001.fastq.gz MC9_ZH_637A_S84_L008_R1_001.fastq.gz > MC9_ZH_R1.gz
cat MC9_ZH_637A_S74_L001_R2_001.fastq.gz MC9_ZH_637A_S74_L003_R2_001.fastq.gz MC9_ZH_637A_S74_L007_R2_001.fastq.gz MC9_ZH_637A_S74_L008_R2_001.fastq.gz MC9_ZH_637A_S84_L008_R2_001.fastq.gz > MC9_ZH_R2.gz
cat DR14_DCRP_479C_S50_L001_R1_001.fastq.gz DR14_DCRP_479C_S50_L002_R1_001.fastq.gz DR14_DCRP_479C_S50_L006_R1_001.fastq.gz DR14_DCRP_479C_S50_L007_R1_001.fastq.gz DR14_DCRP_479C_S50_L008_R1_001.fastq.gz > DR14_DCRP_R1.gz
cat DR14_DCRP_479C_S50_L001_R2_001.fastq.gz DR14_DCRP_479C_S50_L002_R2_001.fastq.gz DR14_DCRP_479C_S50_L006_R2_001.fastq.gz DR14_DCRP_479C_S50_L007_R2_001.fastq.gz DR14_DCRP_479C_S50_L008_R2_001.fastq.gz > DR14_DCRP_R1.gz
답변1
다음 루프는 현재 디렉터리에 있는 FastQ 파일의 고유한 파일 이름 접두사를 제공합니다. 이는 _
우리가 원하는 파일 이름 접두사와 R1
그 안이나 그 뒤 의 파일 이름 사이에 항상 4개의 밑줄( )이 있다는 사실에 의존합니다 .R2
for name in *.fastq.gz; do
printf '%s\n' "${name%_*_*_*_R[12]*}"
done | uniq
다음은 동일하지만 루프를 사용하지 않습니다(파일 이름의 마지막 숫자를 제거하는 대신 파일 이름의 첫 번째 숫자를 유지함).
printf '%s\n' *.fastq.gz | sed 's/^\([^_]*_[^_]*\).*/\1/' | uniq
주어진 파일 목록에 대해 위 중 하나가 반환됩니다.
DR14_DCRP
MC9_FNEN
MC9_FREN
MC9_ZH
그런 다음 다음 접두사를 읽고 연결된 파일을 만듭니다.
for name in *.fastq.gz; do
printf '%s\n' "${name%_*_*_*_R[12]*}"
done | uniq |
while read prefix; do
cat "$prefix"*R1*.fastq.gz >"${prefix}_R1.fastq.gz"
cat "$prefix"*R2*.fastq.gz >"${prefix}_R2.fastq.gz"
done
또는 sed
위의 코드를 사용하여
printf '%s\n' *.fastq.gz | sed 's/^\([^_]*_[^_]*\).*/\1/' | uniq |
while read prefix; do
cat "$prefix"*R1*.fastq.gz >"${prefix}_R1.fastq.gz"
cat "$prefix"*R2*.fastq.gz >"${prefix}_R2.fastq.gz"
done
위 코드는 bash
특정(또는 GNU 특정) 기능을 사용하지 않으며 모든 POSIX 셸에서 작동합니다.
업데이트: 저는 생물정보학자와 함께 일하고 있으며 동료 중 한 명이 다음과 같이 말했습니다.
fastq 파일만 병합하면 안 됩니다. 이상적으로는 각 채널을 개별적으로 매핑하고 적절한 RG를 추가한 다음 BAM 파일을 병합해야 합니다. 채널별 효과 등이 있기 때문입니다. 물론 다운스트림 애플리케이션에 따라 다소 중요할 수도 있습니다.
이와 관련된 질문은 다음을 참조하세요.생물정보학 스택 교환 웹사이트.
답변2
Bash
해결책:
for f in *.fastq.gz; do
[[ "$f" =~ ^([^_]+_[^_]+)_.*(_[^_]+)_[0-9]+\.fastq\.gz$ ]]
cat "$f" >> "${BASH_REMATCH[1]}${BASH_REMATCH[2]}.fastq.gz"
done
^([^_]+_[^_]+)_.*(_[^_]+)_[0-9]+\.fastq\.gz$
- 처음 2개의 접두사를 첫 번째 캡처 그룹(예:MC9_PREN
) 에 캡처R
하고 명명된 접미사를 두 번째 캡처 그룹(예:_R1
) 에 캡처하기 위한 키 정규식 패턴