おはようございます、解決すべき質問がいくつかあります...私の質問に答えていただけるかどうか見てみましょう。
ヌクレオチド (fasta ファイル) を含む .txt があります。各行には 124 のヌクレオチドが含まれており、4 ヌクレオチドのコドンを読み取る必要があります (はい、実際にはコドンは 3 ヌクレオチドで構成されていますが、ここでは 4 x 4 を読み取る必要があります)。124 は 4 の倍数なので、問題ありません。
このループでは、5 秒以内に 5 つのファイル出力を作成します。
sub sequence() {
foreach $line (<SEQ>) {
next if (index($line, ">") != -1);
some actions........
しかし、各行が 4 の倍数でない場合はどうなるでしょうか。各行の長さが 125 ヌクレオチドの場合はどうなりますか? このメカニズムをテストしました(すべての行を結合し、最初の行を無視します):
sub sequence() { #Joining lines from the sequence.
$one = "";
while ($line = <SEQ>) {
next if (index($line, ">") != -1);
chomp $line;
$one .= $line; }
しかし、50秒かかります!!! 私の最初の5秒の代わりに。
上記のコードの代わりに$one
、次のコードも試しましたが、約50秒かかります....
$contents = do { local $/; <SEQ> };
$contents =~ s/\A.*?\n//;
$contents =~ tr/\n//;
それで、私のスクリプトをより速くするための提案はlength($line) % 4 !=0
???
ありがとう!