我正在尝试从mpileup txt文件中过滤掉插入和删除。插入或删除的示例是+ 3ATG或-9AATCGTCTC。
在另一篇文章中,我找到了使用perl的解决方案:
regular expression that reference a match from earlier part of expression
但是,脚本会将插入和删除写入特殊变量$&amp ;.我想在新变量中替换所有插入和删除。所以我的解决方案是相同的,但是在开始时替换并且没有替换,请参见下文。
$ row = ~s /(\ d +)(?? {"。" * $ 1})// xg;
有没有人知道为什么它不会工作或替代解决方案?
我也很乐意匹配任何不插入或删除的内容,并将其作为新变量。
以下是输入的示例:
$,........................... ,, ................ 。,,....,,G。,,,,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,。,............... ,,, ..... ,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ..... ,, ..... ,,, ,,,,,,,, ...... ,,,,,,,,,,,,,,,,,,,,,,,,,,。,,。,,, ... .......................... ,,。,.........,。,。,, ..., .......... ,, ...................... ,,,,,, .......... ................. ,,,,,,,, ..... .. ,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,。,,,,,,,,,,,,,,,,,,,,。+ 12GATGCTGTGTTT .. ,,,,,,,, ,,,,,,,,,,,,。 ,,,,,,,,,,, ,, ,, - 。8tgatgctg ,,, ... ,, .. ,,,,,,,,,,,,,,,,,,,,, ,,,,,,, ..
以下是我想要的输出示例:
$,........................... ,, ................ 。,,....,,G。,,,,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,。,............... ,,, ..... ,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ..... ,, ..... ,,, ,,,,,,,, ...... ,,,,,,,,,,,,,,,,,,,,,,,,,,。,,。,,, ... .......................... ,,。,.........,。,。,, ..., .......... ,, ...................... ,,,,,, .......... ................. ,,,,,,,, ..... .. ,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,。,,,,,,,,,,,,,,,,,,,,。+ ... ,,,,,,,, ,,,,,,,,,,,,,。 ,,,,,,,,,, ,, ,, - 。,,, ... ,, .. ,,,,,,,,,,,,,,,,,,,,,,, ,,,,, ..
干杯,
丹尼尔
答案 0 :(得分:0)
这是你之后的事吗?
use feature qw(say);
my $DNA = ',...........,,....,,g.,,,,,,,,,,,.+12GATGCTGTGTTT..,,,,,.,,.,,-8tgatgctg,,,,,,,,..';
say $DNA;
$DNA =~ s/\d+[ATGCatgc]*//g;
say $DNA;
,...........,,....,,g.,,,,,,,,,,,.+12GATGCTGTGTTT..,,,,,.,,.,,-8tgatgctg,,,,,,,,..
,...........,,....,,g.,,,,,,,,,,,.+..,,,,,.,,.,,-,,,,,,,,..
答案 1 :(得分:0)
您已经拥有的模式略有不同应该有效:
$pileup = '$,...........................,,.................,,....,,g.,,,,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,...............,,,.....,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.....,,.....,,,,,,,,,,,......,,,,,,,,,,,,,,,,,,,,,,,,,,.,,.,,,.............................,,.,.........,.,.,,....,..........,,......................,,,,,,...........................,,,,,,,,.....,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,.+12GATGCTGTGTTT..,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,.,,.,,-8tgatgctg,,,...,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,..';
$pileup =~ s/[+-](\d+)(??{"[ACGTN]{$1}"})//gi;
print($pileup, "\n");
<强>产生强>
$,........................... ,, ................ 。,,....,,G。,,,,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,。,............... ,,, ..... ,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ..... ,, ..... ,,, ,,,,,,,, ...... ,,,,,,,,,,,,,,,,,,,,,,,,,,。,,。,,, ... .......................... ,,。,.........,。,。,, ..., .......... ,, ...................... ,,,,,, .......... ................. ,,,,,,,, ..... .. ,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,。,,,,,,,,,,,,,,,,,,,, ... ,,,,,,,,。,,,,,,,,,,,,,, ,,,,,,,,,。,,。,,,,, ... ,, .. ,,,,,,,,,,,,,,,,,,,,,,,,, ,,, ..
你会注意到的是比你的例子输出更短的几个字符,因为你不小心留在了标志[+ - ]