如何从 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

该表达式将从输入数据的第 2 行开始每隔 4 行 ( )2~4p打印 ( )。p~4

如果您想更具体一点,并在每行之后获取以 开头的行@

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

这将定位以该字符开头的行@,当找到这样的行时,将读取 ( n) 并打印下一行。

答案3

使用(以前称为 Perl_6)

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

上面是用 Raku(Perl 编程语言家族的成员)编写的答案。 Raku 具有强大的正则表达式引擎,(有人说)它比其他语言中的引擎更具可读性。

使用类似-ne非自动打印awk的命令行标志,读入输入行并测试与由脱氧核糖核苷酸字母组成的整行的匹配:A, T, G, C。如果找到匹配项,则( ) 行$_会出现(是 的缩写,以提高将输出哪个变量的清晰度)。put.put$_.put

注意:程序员可以要求与 36 聚体序列匹配,如下所示:

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

或者,由于 FASTQ 格式被指定为 4 字段(即行)记录格式,因此您可以将所有linesin 和rotor/batch一起读取为四个。然后只需选择第二行(即“字段 2 ...原始序列字母”) 的每个,这将是零索引.[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/language/regexes
https://raku.org

相关内容