3

感谢您花时间看这个。

我有一个 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 但我只发现了反向互补功能,并且标题中的“@”而不是“>”存在一些问题)

4

2 回答 2

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

应该管用。

于 2015-04-08T21:28:05.467 回答
1

这是使用 Biostrings(和 ShortRead)的解决方案:

library(ShortRead)
raw <- sread(readFastq("MyFastqFyle.fastq"))
complemented <- complement(raw)
于 2015-04-08T22:53:43.410 回答