2015-04-08 1 views
3

Спасибо, что нашли время, чтобы посмотреть на это.Эффективный способ трансляции каждой N-й строки в bash или R

У меня есть файл fastq, и я хочу, чтобы перевести его на взаимодополняющими, но не наоборот дополняют друг друга, что-то вроде этого:

@Some header example:1: 
ACTGAGACTCGATCA 
+ 
S0m3_Qu4l1t13s& 

Перевод на

@Some header example:1: 
TGACTCTGAGCTAGT 
+ 
S0m3_Qu4l1t13s& 

И код, который я использовал is:

awk '{ 
    if(NR==100000){break} 
    else if((NR+2) % 4 ==0){ system("echo " $0 "| tr ATGC TACG") } 
    else print $0}' MyFastqFyle.fastq > MyDesiredFile.fastq 

И это работает! но этот подход является slooooooooow, даже с небольшими файлами (250M). Интересно, каким другим способом это будет сделано быстрее, неважно, находится ли это в R или bash или аналогично.

(я смотрел на BioStrings Но я нашел только обратную бесплатную функцию, и есть некоторые проблемы с «@» в заголовке вместо «>»)

+0

'chartr ("ВАР", "ATCG", "ACTGAGACTCGATCA")' в простом коде R –

+0

как применить, что весь файл (исключительно для 4-го ряда) – Edahi

ответ

3

Это медленно, потому что вы икра оболочки и процесс в нем для каждой измененной строки. Просто сделай это с СЕПГ:

sed '2~4 y/ATGC/TACG/' MyFastqFyle.fastq > MyDesiredFile.fastq 

Это требует GNU СЭД, так что я надеюсь, что вы не на Mac OS X. Если вы,

sed 'n; y/ATGC/TACG/; n; n' MyFastqFyle.fastq > MyDesiredFile.fastq 

должен работать.

+0

Спасибо! Вот и все. Я хотел принять этот ответ, но мне нужно подождать еще 6 минут, га – Edahi

0

Вот решение, используя Biostrings (и ShortRead):

library(ShortRead) 
raw <- sread(readFastq("MyFastqFyle.fastq")) 
complemented <- complement(raw)