1

ファイル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;  

注: 元のファイルははるかに大きく、分割するとメモリ不足になる可能性があります

4

1 に答える 1