翻译 bash 或 R 中每个第 N 个字符串的有效方法
Efficient way to TRANSLATE every Nth string in bash or R
感谢您抽出时间来看这篇文章。
我有一个 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 " [=13=] "| tr ATGC TACG") }
else print [=13=]}' MyFastqFyle.fastq > MyDesiredFile.fastq
而且有效!但是这种方法很慢,即使是小文件(250M)也是如此。我想知道还有哪种方法可以更快地完成这项工作,无论是在 R 还是 bash 或类似的方法中。
(我查看了BioStrings 但我只发现了反向互补函数,并且header中的“@”而不是“>”存在一些问题
这很慢,因为您为每个更改的行生成一个 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
应该可以。
这是使用 Biostrings(和 ShortRead)的解决方案:
library(ShortRead)
raw <- sread(readFastq("MyFastqFyle.fastq"))
complemented <- complement(raw)
感谢您抽出时间来看这篇文章。
我有一个 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 " [=13=] "| tr ATGC TACG") }
else print [=13=]}' MyFastqFyle.fastq > MyDesiredFile.fastq
而且有效!但是这种方法很慢,即使是小文件(250M)也是如此。我想知道还有哪种方法可以更快地完成这项工作,无论是在 R 还是 bash 或类似的方法中。
(我查看了BioStrings 但我只发现了反向互补函数,并且header中的“@”而不是“>”存在一些问题
这很慢,因为您为每个更改的行生成一个 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
应该可以。
这是使用 Biostrings(和 ShortRead)的解决方案:
library(ShortRead)
raw <- sread(readFastq("MyFastqFyle.fastq"))
complemented <- complement(raw)