FASTQ 파일에서 시퀀스 라인을 추출하는 방법은 무엇입니까?

FASTQ 파일에서 시퀀스 라인을 추출하는 방법은 무엇입니까?

아래와 같이 FASTQ 형식의 Illumina 시퀀스 파일이 있습니다.

@ERR009148.2485 IL26_1382:7:1:224:616 length=36
ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
+ERR009148.2485 IL26_1382:7:1:224:616 length=36
>>>>>>>>>>>>>>>>>>><>><>>>5>>->><->*
@ERR009148.2486 IL26_1382:7:1:914:59 length=36
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
+ERR009148.2486 IL26_1382:7:1:914:59 length=36
.>>74::1>174151/7152313,3&003,00&2%2
@ERR009148.2487 IL26_1382:7:1:251:589 length=36
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
+ERR009148.2487 IL26_1382:7:1:251:589 length=36
>>>>>>>>>>>>>>>>>>>>>>8>>>>>>><;<>>7
@ERR009148.2488 IL26_1382:7:1:911:194 length=36
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG
+ERR009148.2488 IL26_1382:7:1:911:194 length=36
<>>>=>>>>>>>=;<:>>7>==<<7;=67=/57/57

각 레코드에서 원본 시퀀스를 추출하면 됩니다. sed 이를 달성하기 위해 어떤 명령을 사용할 수 있습니까?

예상 출력:

ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG

답변1

사용 sed.

sed -En '/^[ATGC]+$/p' infile

사용 grep:

grep -E '^[ATGC]+$' infile

사용 awk:

awk '/^[ATGC]+$/' infile

이러한 모든 명령은 문자 집합만 포함된 행을 반환합니다 A, C, T, G.

답변2

당신은 시작하고 싶어FASTQ 형식 파일:

GNU를 사용하여 파일에 빈 줄이 없다고 가정하면 다음과 같습니다 sed.

$ sed -n '2~4p' file.fastq
ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG

이 표현식은 입력 데이터의 두 번째 줄부터 시작하여 4줄( )마다 ( )을 2~4p인쇄 합니다.p~4

좀 더 구체적이고 다음으로 시작하는 줄을 얻으려면 @:

$ sed -n '/^@/{n;p;}' file.fastq

그러면 해당 문자로 시작하는 줄을 찾고 @, 해당 줄을 찾으면 n다음 줄을 읽고() 인쇄합니다.

답변3

사용행복하다(이전 Perl_6)

~$ raku -ne '.put if m/^ <[ATGC]>+ $/;'  file

위 내용은 Perl 계열의 프로그래밍 언어인 Raku로 작성된 답변입니다. Raku는 다른 언어의 엔진보다 더 읽기 쉬운 강력한 정규식 엔진을 갖추고 있습니다.

-nenon-autoprint : , , , 와 같은 명령줄 플래그를 사용하여 awk입력 줄을 읽고 디옥시리보뉴클레오티드 문자로 구성된 전체 줄과 일치하는지 테스트합니다 . 일치하는 항목이 발견되면 ( ) 줄이 나타납니다(어떤 변수가 출력될지 명확하게 하기 위한 약어).ATGC$_put.put$_.put

참고: 프로그래머는 다음과 같이 36머 시퀀스에 대한 일치를 요청할 수 있습니다.

~$ raku -ne '.put if m/^ <[ATGC]>**36 $/;'  file

또는 FASTQ 형식을 4필드(즉, 행) 레코드 형식으로 지정하므로 lines올인 및 rotor/를 batch4개로 함께 읽을 수 있다. 그런 다음 두 번째 행(예:"필드 2...원래 시퀀스 문자"), 0인덱싱됩니다 .[1].

~$ raku -e '*.[1].put for lines.rotor(4);'  file

입력 예:

@ERR009148.2485 IL26_1382:7:1:224:616 length=36
ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
+ERR009148.2485 IL26_1382:7:1:224:616 length=36
>>>>>>>>>>>>>>>>>>><>><>>>5>>->><->*
@ERR009148.2486 IL26_1382:7:1:914:59 length=36
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
+ERR009148.2486 IL26_1382:7:1:914:59 length=36
.>>74::1>174151/7152313,3&003,00&2%2
@ERR009148.2487 IL26_1382:7:1:251:589 length=36
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
+ERR009148.2487 IL26_1382:7:1:251:589 length=36
>>>>>>>>>>>>>>>>>>>>>>8>>>>>>><;<>>7
@ERR009148.2488 IL26_1382:7:1:911:194 length=36
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG
+ERR009148.2488 IL26_1382:7:1:911:194 length=36
<>>>=>>>>>>>=;<:>>7>==<<7;=67=/57/57

출력 예(모든 코드 예):

ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG

https://en.wikipedia.org/wiki/FASTQ_format
https://docs.raku.org/언어/regexes
https://raku.org

관련 정보