시퀀스 번호를 기준으로 큰 행 청크 삭제

시퀀스 번호를 기준으로 큰 행 청크 삭제

다음과 같이 구성된 차세대 시퀀싱 데이터에서 fastq 파일을 처리하고 있습니다.

  • 시퀀서, 레인, "타일" 및 읽기 수에 대한 행 1 정보
  • 시퀀스에 대한 라인 2 정보
  • 3번째 줄은 + 기호로 구분 기호로 사용됩니다.
  • 읽기 품질에 대한 4행 정보

첫 번째 행의 5번째 위치(검은색)에 있는 특정 숫자 범위 내의 모든 판독값을 삭제하고 싶습니다.

다음은 1101과 1103 사이의 읽기를 제거하는 예입니다. 입력하다:

@ST-E00204:114:HHKTJALXX:4:1101:22962:1538_1:N:0:1/1
NGTTTGTTAATTATTAAGTTTTTTTAGTTTTTAAGGATTTTTATAGTAGTAATAGAAATTTAATTAAGATAGAAAATTTTAAGTGTGGTTAGGATTGTAGTTTTGTTGGTATTATGTTGATTTAGTATAAGTAAAGTTTTGATTTT
+
AAAAJJJJFJJAJJJAJAJJJJJJJJAJJ-FJJJJF--FJJJJFJJJFFJJJFFJ-JJJJFFFFJ-AJ7AJJJJJJJFJJJJFJFAJFFJJF-AAFAJFJJ7AJAJJFJFJJJ7FFFFFJFJJ-7F-77A JF--7FJ 제이


@ST-E00204:114:HHKTJALXX:4:1102:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTTT
+
!AA-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFFF<-F<FJJJF-<7<JF<-7AAFFJ--A<A77--7FAAF-A----7FF-7-7<FJ<A -7--<F7---77<----7-<<FA---7<<---7---

@ST-E00204:114:HHKTJALXX:4:1103:7141:2012 2:N:0:1
NAAAACATAAAATATAACAAACAAACTAAAAATCATAAAAAATAAAAAAACATCCACTTAACAACTTAAAAAATAACAAATCACTAATTATAATAAAAAATAAAAAATACACACTCTAACACCTAAAACAACCAAAAAAACTAAAACTCC
+
!AAFFFFJJJJA-F--AFFJJ-F<JJF<AJFJ<JF-7<JJAA7-J-FFFJ7JJJFJ-F<AJJJJFFJ-AF-AJ<FF-JFFF-77<JJ---777<7--7 -A<JA-7<<FFF<--7--7-FFFF-<---7---7A-<A7FA------7-

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTTT
+
!AA-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFFF<-F<FJJJF-<7<JF<-7AAFFJ--A<A77--7FAAF-A----7FF-7-7<FJ<A -7--<F7---77<----7-<<FA---7<<---7---

원하는 출력:

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTTT
+
!AA-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFFF<-F<FJJJF-<7<JF<-7AAFFJ--A<A77--7FAAF-A----7FF-7-7<FJ<A -7--<F7---77<----7-<<FA---7<<---7---

한 가지 아이디어는 다음을 사용하는 것입니다.

split -l 4 myfile.fq

그런 다음 다섯 번째 위치의 숫자를 기준으로 각 파일을 삭제합니다. 예를 들면 다음과 같습니다.

grep -v ":1104"
grep -v ":1105"

잠깐만요, 그런데 문제는 파일이 너무 크다는 것입니다. 또한 각 숫자가 많은 읽기 수에 해당하는 1000에서 2000과 같이 더 큰 간격을 제거해야 했습니다.

답변1

해결책:

awk -F':' -v RS="@" 'NR>1 && ($5<1101 || $5>1103){ print RS$0 }' myfile.fq

산출:

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTT
+
!A-A-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFF<-F

세부 사항:

  • -F':'- 필드 구분 기호:

  • -v RS="@"- @레코드 구분자로 간주됩니다.

  • ($5<1101 || $5>1103)- 필수 항목이 기준에 맞는지 확인하세요."1101~1103 사이 삭제"

답변2

이것은 각 블록의 길이가 정확히 4줄이라고 가정하는 이상한 솔루션입니다.

awk -F ':' '
    NR % 4 == 1 { keep = ($5 < 1101 || $5 > 1103) }
    keep
'

설명하다:

  • -F :필드 구분 기호를 로 설정합니다 :. $5현재 행의 다섯 번째 필드입니다(1부터 시작하여 번호가 매겨짐).
  • NR % 4 == 1 { … }NR % 4 == 1조건이 true인 경우, 즉 현재 행 번호가 4+1의 배수인 경우 중괄호 안의 코드가 실행됩니다.
  • keep = (…)변수를 keep지정된 조건으로 설정합니다.
  • line은 keep변수가 true이면 현재 행을 인쇄한다고 말합니다 keep. 4행마다만 설정 되므로 keep4행 블록 내 모든 행에 동일하게 적용됩니다.

답변3

sed -e '
   /@/s/:/\n/4; /@/s/:/\n/4
   /\n110[1-3]\n/,/^$/d
   y/\n/:/
' fastq.data

  1. 로 시작하는 줄에 일련번호를 표시하세요 @.
  2. 시퀀스 번호 1101, 1102 또는 1103이 포함된 블록을 삭제합니다.
  3. 다른 모든 청크에서는 토큰을 제거하여 표준 출력으로 보냅니다.

결과

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTT
+
!A-A-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFF<-F

관련 정보