문제

항상 다음 형식으로 4 개의 블록으로 제공되는 데이터가 있습니다 (FASTQ라고 함).

@SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
+SRR018006.2016 GA2:6:1:20:650 length=36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+!
@SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SRR018006.19405469 GA2:6:100:1793:611 length=36
7);;).;);;/;*.2>/@@7;@77<..;)58)5/>/

이 형식으로 변환하는 간단한 SED/awk/bash 방법이 있습니까 (Fasta라고 함).

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

원칙적으로, 우리는 각각 4 블록에서 처음 두 줄을 추출하고 교체하려고합니다. @ ~와 함께 >.

도움이 되었습니까?

해결책

이것은 오래된 질문이며, 다양한 솔루션이 제공되었습니다. 허용 된 답변은 SED를 사용하지만 눈부신 문제가 있으므로 ( @ 부호가 품질 라인의 첫 글자로 표시되면>로 @로 대체됩니다) 실제로 작동하는 간단한 SED 기반 솔루션을 제공해야합니다. :

sed -n '1~4s/^@/>/p;2~4p' 

유일한 가정은 각각의 읽기가 FastQ 파일에서 정확히 4 줄을 차지하지만, 내 경험상 꽤 안전 해 보인다는 것입니다.

FASTX 툴킷의 FASTQ_TO_FASTA 스크립트도 작동합니다. (현재 일반적인 PHRED+33 Qual 인코딩을 수용하기 위해 -Q33 옵션을 지정해야한다는 것을 언급 할 가치가 있습니다. 어쨌든 품질 데이터를 버리고 있기 때문에 재미 있습니다!)

다른 팁

SED는 죽지 않았습니다. 우리가 골프하는 경우 :

sed '/^@/!d;s//>/;N'

또는 에뮬레이션 http://www.ringtail.tsl.ac.uk/david-studholme/scripts/fastq2fasta.pl Pierre가 게시 한 첫 번째 줄에서 첫 번째 단어 (ID) 만 인쇄하고 (일부) 오류 처리를 수행합니다.

#!/usr/bin/sed -f
# Read a total of four lines
$b error
N;$b error
N;$b error
N
# Parse the lines
/^@\(\([^ ]*\).*\)\(\n[ACGTN]*\)\n+\1\n.*$/{
  # Output id and sequence for FASTA format.
  s//>\2\3/
  b
}
:error
i\
Error parsing input:
q

이러한 형식을 변환하기위한 기존 도구가 많이있는 것 같습니다. 여기에 게시 된 내용 대신 (위 포함)를 사용해야합니다.

Cock, et al (2009) NAR에 자세히 설명 된 바와 같이, "@'마커 문자 (ASCII 64)가 품질 문자열의 어느 곳에서나 발생할 수 있기 때문에 이러한 솔루션 중 다수가 잘못되었습니다. 이는 모든 파서가 라인을 시작하지 않아야 함을 의미합니다. '@'는 다음 레코드의 시작을 나타내는 것처럼, 품질 문자열의 길이를 추가로 확인하지 않고 시퀀스의 길이와 일치합니다. "

보다 http://ukpmc.ac.uk/articlerender.cgi?accid=pmc2847217 자세한 내용은.

그냥 아, 다른 도구가 필요하지 않습니다

# awk '/^@SR/{gsub(/^@/,">",$1);print;getline;print}' file
>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

나는 쓸 것이다

awk '
    NR%4 == 1 {print ">" substr($0, 2)}
    NR%4 == 2 {print}
' fastq > fasta

이것은 내가 가진 가장 빠른 것입니다.

alias fq2fa="awk '{print \">\" substr(\$0,2);getline;print;getline;getline}'"

@로 시작하는 드물지만 불가능한 품질 라인에는 실패하지는 않지만 합법적 인 경우 래핑 된 FastQ에서는 실패합니다 (그러나 존재합니다).

다음은 방금 배운 문제의 "다른 모든 라인 건너 뛰기"에 대한 해결책입니다.

while read line
do
    # print two lines
    echo "$line"
    read line_to_print
    echo "$line_to_print"

    # and skip two lines
    read line_to_skip
    read line_to_skip
done

해야 할 일이 모두 변경되는 경우 @ 에게 >, 나는 생각합니다

while read line
do
    echo "$line" | sed 's/@/>/'
    read line
    echo "$line"

    read line_to_skip
    read line_to_skip
done

일을 할 것입니다.

같은 것 :

awk 'BEGIN{a=0}{if(a==1){print;a=0}}/^@/{print;a=1}' myFastqFile | sed 's/^@/>/'

작동해야합니다.

GNU Grep을 사용하면 다음과 같이 할 수 있다고 생각합니다.

grep -A 1 "^@" t.txt | grep -v "^--" | sed -e "s/^@/\>/"
awk 'BEGIN{P=1}{if(P==1||P==2){gsub(/^[@]/,">");print}; if(P==4)P=0; P++}' data

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

아래에

awk '{gsub(/^[@]/,">"); print}' data

여기서 데이터는 데이터 파일입니다. 나는 받았다 :

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
+SRR018006.2016 GA2:6:1:20:650 length=36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+!
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SRR018006.19405469 GA2:6:100:1793:611 length=36
7);;).;);;/;*.2>/@@7;@77<..;)58)5/>/

나는 미래에 내가 길을 알고 있지만 구글러의 이익을 위해 :

사용하고 싶을 수도 있습니다 Fastx 툴킷의 FastQ_To_Fasta. 그래도 @ 부호를 유지합니다. 또한 말하지 않으면 NS로 선을 제거합니다.

BioAwk에 관심이있을 수 있습니다. FASTA 파일을 처리하도록 조정되는 AWK의 적응 된 버전입니다.

bioawk -c fastx '{ print ">"$name ORS $seq }' file.fastq

메모: Bioawk 기반입니다 브라이언 kernighan의 어색한 문서화되어 있습니다 Al Aho, Brian Kernighan 및 Peter Weinberger의 "AWK 프로그래밍 언어"(Addison-Wesley, 1988, ISBN 0-201-07981-X). 이 버전이 호환되는지 확실하지 않습니다 posix.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top