感谢您花时间看这个。

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

最佳答案

这很慢,因为您为每个更改的行生成一个 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

应该管用。

关于r - 在 bash 或 R 中翻译每个第 N 个字符串的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29525592/

10-12 17:49