文件1
1 M S S N S D T G D L Q E S L K H G L T P I G A G L P D R H G S P I P A R G R L V M L P K V E T E A L G L A R S H
2 M H S S N P K V R S S P S G N T Q S S P K S K Q E V M V R P P T V M S P S G N P Q L D S K F S N
3 M N G H S D E E S V R N S S G E S S Q S D D D S G S A S G S G S G S S S G S S S D G S
文件2
1 9 24 36 40
2 1 14 19 35
3 8 37
期望的输出
文件 2 包含制表符分隔的数字,所有行中的每两个数字是需要从相应序列中删除的字母范围(制表符分隔的文件 1)。例如,对于序列 1,我需要打印从 1 到 8 (不是 9 到 24)、25 到 35 (不是 36 到 40)和 41 到肽末端的字母。
我的代码(不完美)
#!usr/bin/perl -w
use warnings;
open( FH, "a.txt" );
@seq = <FH>;
open( FH1, "b.txt" );
@num = <FH1>;
open( OUT, ">out.txt" );
@seqs = split( /\n/, "@seq" );
@nums = split( /\n/, "@num" );
foreach $new (@nums) {
@num1 = split( '\t', $new );
$n1 = $num1[1];
$n2 = $num1[2];
$n3 = $num1[3];
$n4 = $num1[4];
}
foreach $old (@seqs) {
@seq1 = split( '\t', $old );
$len = @seq1;
print OUT"@seq1[0..$n1,$n2..$n3,$n4..$len]";
}
close FH;
close FH1;
close OUT;
注意:原始文件要大得多,拆分可能会耗尽内存