2016-05-13 5 views
0

Я пытаюсь отфильтровать вставки и удаления из файла mpileup txt. Примером вставки или удаления будет + 3ATG или -9AATCGTCTC.Команда mpileup regex для удаления indels

В другом посте я нашел решение с помощью Perl:

regular expression that reference a match from earlier part of expression

Однако, сценарий записывает вставки и делеции в специальной переменной $ &. Я бы хотел заменить все вставки и удаления ничем в новой переменной. Таким образом, мое решение идентично, но с заменой в начале и заменой ничем, см. Ниже.

$ row = ~ s/(\ d +) (?? {"." * $ 1}) // xg;

Кто-нибудь знает, почему это не будет работать или альтернативное решение?

Я также был бы счастлив соответствовать всем, что не было вложением или удалением, и сделать это новой переменной.


Вот пример ввода:

$, ........................... ,, .................,,....,,г.,,,,,..,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,. ............... ,,, ..... ,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ..... ,, ..... ,,,,,,,,,,, ...... ,,,,,,,,,,,,,,,,,,,, ,,,,,,. ,,. ,,, ............................. ,,., .... .....,.,. ,, ...., .......... ,, ...................... ,,,,,, ........................... ,,,,,,,, ....., .., ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,. ,,,,,,,,,,,,,,,,,,,,. + 12GATGCTGTGTTT .. ,,,,, ,,, ,,,,,,,,,,,,,,,,,,,,,,, ,, ,, -... 8tgatgctg ,,, ... ,, .. ,,,,, ,,,,,,,,,,,,,,,,,,,,,,, ..

Вот пример вывода я хотел бы:

$, ........................... ,, .................,,....,,г.,,,,,..,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,. ............... ,,, ..... ,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ..... ,, ..... ,,,,,,,,,,, ...... ,,,,,,,,,,,,,,,,,,,, ,,,,,,. ,,. ,,, ............................. ,,., .... .....,.,. ,, ...., .......... ,, ...................... ,,,,,, ........................... ,,,,,,,, ....., .., ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,. ,,,,,,,,,,,,,,,,,,,,. + .. ,,,,,, ,, ,,,,,,,,,,,,,,,,,,,,,,, ,, ,, -... ,,, ... ,, .. ,,,,,,, ,,,,,,,,,,,,,,,,,,,,, ..

Cheers,

Daniel

+0

Можете ли вы дать ожидаемый ввод и вывод, и ясно продемонстрировать, что вы пытаетесь сделать? – fugu

ответ

0

Это то, что вы после этого?

use feature qw(say); 

my $DNA = ',...........,,....,,g.,,,,,,,,,,,.+12GATGCTGTGTTT..,,,,,.,,.,,-8tgatgctg,,,,,,,,..'; 

say $DNA; 

$DNA =~ s/\d+[ATGCatgc]*//g; 

say $DNA; 

,...........,,....,,g.,,,,,,,,,,,.+12GATGCTGTGTTT..,,,,,.,,.,,-8tgatgctg,,,,,,,,.. 
,...........,,....,,g.,,,,,,,,,,,.+..,,,,,.,,.,,-,,,,,,,,.. 
+0

Мне пришлось помещать файл в массив и использовать ваш ответ в цикле foreach, но это отлично работает. Большое спасибо за вашу помощь! –

+0

@ DanielKelly - Не беспокойтесь! – fugu

+0

@ DanielKelly, я не считаю, что это работает. Рассмотрим «+ 3ACGT» - жадный характер * будет потреблять больше оснований, чем указывает indel. См. Мой ответ на [регулярное выражение Python для сопоставления и удаления индексов в формате pileup] (http://stackoverflow.com/questions/37491704/python-regex-to-match-and-remove-the-indels-in-pileup- format/40231190 # 40231190) для дальнейшего обсуждения этого вопроса. – cdlane

0

Небольшое изменение по образцу у вас уже есть должны работать:

$pileup = '$,...........................,,.................,,....,,g.,,,,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,...............,,,.....,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.....,,.....,,,,,,,,,,,......,,,,,,,,,,,,,,,,,,,,,,,,,,.,,.,,,.............................,,.,.........,.,.,,....,..........,,......................,,,,,,...........................,,,,,,,,.....,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,.+12GATGCTGTGTTT..,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,.,,.,,-8tgatgctg,,,...,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,..'; 

$pileup =~ s/[+-](\d+)(??{"[ACGTN]{$1}"})//gi; 

print($pileup, "\n"); 

продуцирует

$, ......... ..................,,.................,,....,,г.,,, ,, .. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,., ........ ....... ,,, ..... ,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,, ..... ,, .....,,,,,,,,,,, ...... ,,,,,,,,,,,,,,,,,,,,,,,,,,. ,, ,,,. ............................. ,,., .........,.,. ,, .. .., .......... ,, ...................... ,,,,,, ....... .................... ,,,,,,,, ....., .. ,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,. ,,,,,,,,,,,,,,,,,,,, ... ,,,,,,,,. ,,,,,,,,,,, ,,,,,,,,,,,,. ,,. ,,,,, ... ,, .. ,,,,,,,,,,,,,,,,,,,,,, ,,,,,, ..

Что вы заметите несколько символов короче, чем ваш пример вывода, как вы случайно оставили в знаках [+ -]