다음과 같이 구성된 차세대 시퀀싱 데이터에서 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행마다만 설정 되므로keep
4행 블록 내 모든 행에 동일하게 적용됩니다.
답변3
sed -e '
/@/s/:/\n/4; /@/s/:/\n/4
/\n110[1-3]\n/,/^$/d
y/\n/:/
' fastq.data
- 로 시작하는 줄에 일련번호를 표시하세요
@
. - 시퀀스 번호 1101, 1102 또는 1103이 포함된 블록을 삭제합니다.
- 다른 모든 청크에서는 토큰을 제거하여 표준 출력으로 보냅니다.
결과
@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTT
+
!A-A-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFF<-F