感谢您抽出宝贵时间来研究这个问题。
我有一个fastq文件,我想把它翻译成互补的,但不是反向互补的,像这样:
@Some header example:1:
ACTGAGACTCGATCA
+
S0m3_Qu4l1t13s&
转换为
@Some header example:1:
TGACTCTGAGCTAGT
+
S0m3_Qu4l1t13s&
我使用的代码是:
awk '{
if(NR==100000){break}
else if((NR+2) % 4 ==0 ){ system("echo " $0 "| tr ATGC TACG") }
else print $0}' MyFastqFyle.fastq > MyDesiredFile.fastq
它有效!但这种方法很好,即使是小文件(250M)也是如此。我想知道哪种方式可以更快地完成,如果这是R或bash或类似的事情并不重要。
(我查看了BioStrings但是我只找到了反向补充功能,而#34; @"在标题中有一些问题而不是">")
答案 0 :(得分:3)
这很慢,因为你为每个更改的行生成了一个shell和一个进程。只需使用sed:
sed '2~4 y/ATGC/TACG/' MyFastqFyle.fastq > MyDesiredFile.fastq
这需要GNU sed,所以我希望你不在Mac OS X上。如果你是,
sed 'n; y/ATGC/TACG/; n; n' MyFastqFyle.fastq > MyDesiredFile.fastq
应该有用。
答案 1 :(得分:1)
以下是使用Biostrings(和ShortRead)的解决方案:
library(ShortRead)
raw <- sread(readFastq("MyFastqFyle.fastq"))
complemented <- complement(raw)