ファイル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 には、すべての行の 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;
注: 元のファイルははるかに大きく、分割するとメモリ不足になる可能性があります