아래와 같이 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는 다른 언어의 엔진보다 더 읽기 쉬운 강력한 정규식 엔진을 갖추고 있습니다.
-ne
non-autoprint : , , , 와 같은 명령줄 플래그를 사용하여 awk
입력 줄을 읽고 디옥시리보뉴클레오티드 문자로 구성된 전체 줄과 일치하는지 테스트합니다 . 일치하는 항목이 발견되면 ( ) 줄이 나타납니다(어떤 변수가 출력될지 명확하게 하기 위한 약어).A
T
G
C
$_
put
.put
$_.put
참고: 프로그래머는 다음과 같이 36머 시퀀스에 대한 일치를 요청할 수 있습니다.
~$ raku -ne '.put if m/^ <[ATGC]>**36 $/;' file
또는 FASTQ 형식을 4필드(즉, 행) 레코드 형식으로 지정하므로 lines
올인 및 rotor
/를 batch
4개로 함께 읽을 수 있다. 그런 다음 두 번째 행(예:"필드 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