我有一个数据,总是以下列格式(称为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个块中提取前两行,并将 @
替换为 >
.
13 回答
这是一个老问题,并且提供了许多不同的解决方案 . 由于接受的答案使用sed但有一个明显的问题(当@符号作为质量线的第一个字母出现时它将取代@),我觉得有必要提供一个简单的基于sed的解决方案,它实际上有效:
唯一的假设是每次读取在FASTQ文件中只占用4行,但根据我的经验,这看起来非常安全 .
fastx工具包中的fastq_to_fasta脚本也可以使用 . (值得一提的是,您需要指定-Q33选项以适应现在常见的Phred 33质量编码 . 这很有趣,因为它无论如何都会丢弃质量数据!)
赛德并没有死 . 如果我们打高尔夫球:
或者,模仿Pierre发布的http://www.ringtail.tsl.ac.uk/david-studholme/scripts/fastq2fasta.pl,它只打印第一行的第一个单词(id)并进行(某些)错误处理:
似乎有很多现有的工具可用于转换这些格式;您应该使用这些而不是在此处发布的任何内容(包括上述内容) .
正如Cock,et al(2009)NAR中详述的那样,许多这些解决方案都是错误的,因为“'''标记字符(ASCII 64)可能出现在质量字符串中的任何位置 . 这意味着任何解析器都不能处理以'@'表示下一条记录的开始,而不另外检查质量字符串的长度到目前为止与序列的长度相匹配 . “
有关详细信息,请参阅http://ukpmc.ac.uk/articlerender.cgi?accid=PMC2847217 .
只是awk,不需要其他工具
见http://www.ringtail.tsl.ac.uk/david-studholme/scripts/中的 fastq2fasta.pl
我会写的
这是我得到的最快的,我把它放在我的.bashrc文件中:
它不会以偶然但不是不可能的质量行开始,它们以@开头但在包装的FASTQ上失败,如果这甚至是合法的(尽管存在) .
这是我刚从SO学到的问题的“跳过每一行”的解决方案:
如果所有需要做的就是将
@
更改为>
,那么我估计会做的 .
就像是:
应该管用 .
我想,使用gnu grep可以用这个来完成:
下面
数据是您的数据文件 . 我收到了:
我知道我将来的方式,但为了googlers的利益:
您可能想要使用fastq_to_fasta from the fastx toolkit . 但它会保留@符号 . 它也会删除带有Ns的行,除非你不告诉它 .
您可能对bioawk感兴趣,它是awk的改编版本,可以调整处理fasta文件
Note: BioAwk基于Brian Kernighan's awk,记录在"The AWK Programming Language", by Al Aho, Brian Kernighan, and Peter Weinberger (Addison-Wesley, 1988, ISBN 0-201-07981-X)中 . 我不确定这个版本是否与POSIX兼容 .