Извлечение идентификатора и последовательности из файла FASTQ

Я пытаюсь манипулировать файлом Fastq. Это выглядит так:

@HWUSI-EAS610:1:1:3:1131#0/1
GATGCTAAGCCCCTAAGGTCATAAGACTGNNANGTC
+
B<ABA<;B@=4A9@:6@96:1??9;>##########
@HWUSI-EAS610:1:1:3:888#0/1
GATAGGACCAAACATCTAACATCTTCCCGNNGNTTC
+
B9>>ABA@B7BB:7?@####################
@HWUSI-EAS610:1:1:4:941#0/1
GCTTAGGAAGGAAGGAAGGAAGGGGTGTTCTGTAGT
+
BBBB:CB=@CB@?BA/@BA;6>BBA8A6A<?A4?B=
...
...
...
@HWUSI-EAS610:1:1:7:1951#0/1
TGATAGATAAGTGCCTACCTGCTTACGTTACTCTCC
+
BB=A6A9>BBB9B;B:B?B@BA@AB@B: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). После каждого идентификатора идет строка с его последовательностью. Теперь я хотел бы получить файл только с каждым идентификатором и его соответствующей последовательностью, и последовательность должна быть обратной и дополнительной. (A=T, T=A, C=G, G=C) С помощью Sed я могу получить всю последовательность, обратную и дополнительную, с помощью команды

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

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


person wayne_szalinsky    schedule 20.03.2015    source источник
comment
Так как же выглядит желаемый результат?   -  person Tom Fenech    schedule 20.03.2015


Ответы (2)


С СЭД:

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 печатает только материал перед первой новой строкой.

person Wintermute    schedule 20.03.2015
comment
Большое спасибо! Это замечательно! - person wayne_szalinsky; 20.03.2015

$ 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
person Chris Seymour    schedule 20.03.2015