我有 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 字段(即行)记录格式,因此您可以将所有lines
in 和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