Как получить определенные 1000 букв в последовательности, используя grep - PullRequest
1 голос
/ 19 апреля 2020

У меня есть файл, содержащий эту форму информации:

>scaffold1|size69534
ACATAAGAGSTGATGATAGATAGATGCAGATGACAGATGANNGTGANNNNNNNNNNNNNTAGAT
>scaffold2|size68281
ATAGAGATGAGACAGATGACAGANNNNAGATAGATAGAGCAGATAGACANNNNAGATAGAG
>scaffold3|size67203
ATAGAGTAGAGAGAGAGTACAGATAGAGGAGAGAGATAGACNNNNNNACATYYYYYYYYYYYYYYYYY
>scaffold4|size66423
ACAGATAGCAGATAGACAGATNNNNNNNAGATAGTAGACSSSSSSSSSS

и т. Д.

Но я предполагаю, что в последовательности есть что-то ненормальное, поэтому я хочу, чтобы grep все буквы, которые не являются A, C, T, G или N во всех строках после scaffold (я хочу искать только в строках, где последовательность не находится в строке> scaffold-size).
In в приведенном выше примере будет grep YYYYYYYYYYYYYYYYYY после scaffold3 и SSSSSSSSSSSSS в scaffold 4.
Надеюсь, я достаточно ясен, пожалуйста, если вам нужны какие-либо разъяснения, скажите мне.

Спасибо

Ответы [ 3 ]

1 голос
/ 19 апреля 2020

Не могли бы вы попробовать следующее, учитывая, что вам не нужны пустые строки, затем попробуйте выполнить следующее.

awk '!/^>/{gsub(/[ACTGN]/,"");if(NF){print}}'  Input_file

Объяснение: Добавление подробного объяснения выше код здесь.

awk '                    ##Starting awk program from here.
!/^>/{                   ##Checking condition if a line does not starts from > then do following.
  gsub(/[ACTGN]/,"")     ##Globally substituting A,C,T,G,N will NULL in lines here.
  if(NF){                ##Checking condition if current is NOT NULL after substitution then do following.
    print                ##Print the current line.
  }
}
'  Input_file            ##Mentioning Input_file name here.

Вывод будет следующим.

S
YYYYYYYYYYYYYYYYY
SSSSSSSSSS
0 голосов
/ 20 апреля 2020

Предположим, вам не нужно просто знать, какие последовательности содержат недопустимые символы - вы также хотите знать, к какому каркасу относится каждая последовательность. Это может быть сделано; как это сделать, зависит от того, какой формат вывода вам нужен, а также от точной структуры данных.

Только для иллюстрации я сделаю следующие упрощающие предположения: «последовательности» могут содержать только заглавные буквы (которые могут быть действительными или недействительными - но не может быть знаков препинания или цифр и т. д. c.); и метки (строки, начинающиеся с >) не содержат заглавных букв. Примечание. Если последовательности содержат только буквы, то нетрудно предварительно обработать файл для преобразования последовательностей в верхний регистр, а метки - в строчные, поэтому приведенное ниже решение будет работать.

В некоторых версиях GREP недопустимые символы отображаются другим цветом (см. Связанное изображение). Я нахожу это весьма полезным.

grep --no-group-separator -B 1 '[BDEFHIJKLMOPQRSUVWXYZ]' input_file

ВЫХОД:

>scaffold1|size69534
ACATAAGAGSTGATGATAGATAGATGCAGATGACAGATGANNGTGANNNNNNNNNNNNNTAGAT
>scaffold3|size67203
ATAGAGTAGAGAGAGAGTACAGATAGAGGAGAGAGATAGACNNNNNNACATYYYYYYYYYYYYYYYYY
>scaffold4|size66423
ACAGATAGCAGATAGACAGATNNNNNNNAGATAGTAGACSSSSSSSSSS

enter image description here

0 голосов
/ 19 апреля 2020

используйте grep -v для удаления линий лесов и используйте grep -oP для выбора сегментов нежелательных букв.

cat test.txt | grep -v '^>' | grep -oP '[^ACGTN]+'

вывод из данных образца

S
YYYYYYYYYYYYYYYYY
SSSSSSSSSS
...