2015-03-20 5 views
0

Я пытаюсь манипулировать файлом Fastq. Это выглядит следующим образом:Извлечение идентификатора и последовательности из файла FASTQ

@HWUSI-EAS610:1:1:3:1131#0/1 
GATGCTAAGCCCCTAAGGTCATAAGACTGNNANGTC 
+ 
B<ABA<;[email protected][email protected]:[email protected]:1??9;>########## 
@HWUSI-EAS610:1:1:3:888#0/1 
GATAGGACCAAACATCTAACATCTTCCCGNNGNTTC 
+ 
B9>>[email protected]:[email protected]#################### 
@HWUSI-EAS610:1:1:4:941#0/1 
GCTTAGGAAGGAAGGAAGGAAGGGGTGTTCTGTAGT 
+ 
BBBB:[email protected]@?BA/@BA;6>BBA8A6A<?A4?B= 
... 
... 
... 
@HWUSI-EAS610:1:1:7:1951#0/1 
TGATAGATAAGTGCCTACCTGCTTACGTTACTCTCC 
+ 
BB=A6A9>BBB9B;B:[email protected]@[email protected]:74:;8=>7 

Мой ожидается выход:

@HWUSI-EAS610:1:1:3:1131#0/1 
GACNTNNCAGTCTTATGACCTTAGGGGCTTAGCATC 
@HWUSI-EAS610:1:1:3:888#0/1 
GAANCNNCGGGAAGATGTTAGATGTTTGGTCCTATC 
@HWUSI-EAS610:1:1:4:941#0/1 
ACTACAGAACACCCCTTCCTTCCTTCCTTCCTAAGC 

Таким образом, идентификатор линии являются те, которые начинаются с @HWUSI (т.е. @ HWUSI-EAS610: 1: 1: 7: 1951 # 0/1). После каждого идентификатора есть строка с ее последовательностью. Теперь я хотел бы получить файл только с каждым идентификатором и его соответствующей последовательностью, и последовательность должна быть обратной и дополнять. (А = Т, Т = А, С = С, С = С) С Sed можно получить всю последовательность реверсивной и комплементарной с помощью команды

sed -n '2~4p' MYFILE.fq | rev | tr ATCG TAGC 

Как можно получить также соответствующий идентификатор?

+1

Так что же ваш желаемый результат выглядит? –

ответ

1

С СЕПГ:

sed -n '/@HWUSI/ { p; s/.*//; N; :a /\n$/! { s/\n\(.*\)\(.\)/\2\n\1/; ba }; y/ATCG/TAGC/; p }' filename 

Это работает следующим образом:

/@HWUSI/ {      # If a line starts with @HWUSI 
    p       # print it 
    s/.*//      # empty the pattern space 
    N       # fetch the sequence line. It is now preceded 
           # by a newline in the pattern space. That is 
           # going to be our cursor 
    :a       # jump label for looping 
    /\n$/! {      # while the cursor has not arrived at the end 
    s/\n\(.*\)\(.\)/\2\n\1/ # move the last character before the cursor 
    ba       # go back to a. This loop reverses the sequence 
    } 
    y/ATCG/TAGC/     # then invert it 
    p       # and print it. 
} 

Я намеренно оставил строку там более читаемым расстояния; если это нежелательно, замените последний p на P (верхний регистр вместо нижнего регистра). Где p печатает весь узор, P печатает только перед первой новой строкой.

+0

Спасибо вам большое! Это идеально! –

0
$ sed -n '/^[^@]/y/ATCG/TAGC/;/^@/p;/^[ATCGN]*$/p' file 
@HWUSI-EAS610:1:1:3:1131#0/1 
CTACGATTCGGGGATTCCAGTATTCTGACNNTNCAG 
@HWUSI-EAS610:1:1:3:888#0/1 
CTATCCTGGTTTGTAGATTGTAGAAGGGCNNCNAAG 
@HWUSI-EAS610:1:1:4:941#0/1 
CGAATCCTTCCTTCCTTCCTTCCCCACAAGACATCA 
@HWUSI-EAS610:1:1:7:1951#0/1 
ACTATCTATTCACGGATGGACGAATGCAATGAGAGG 

Объяснение

/^[^@]/y/ATCG/TAGC/ # Translate bases on lines that don't start with an @  
/^@/p    # Print IDs 
/^[ATCGN]*$/p  # Print sequence lines