• 締切済み

FASTAファイルをperlでフォーマット

>(DNA配列の描写 i.e.生物名、リファレンス番号) AGCAAAAGGGGGGGCCCCCCCCCCCCCCC 以下数行DNA配列が続く。 という繰り返しでできているFASTAファイルを 一列目を >(DNA描写) 二列目を一本のDNA配列 で表示させたい、と思っています。 while (<STDIN>){ if(/^>/){ print; }else{ chomp; chop; } }; print; としたのですが うまくいきません。 なぜなのでしょうか。

  • Perl
  • 回答数1
  • ありがとう数2

みんなの回答

  • rafysta
  • ベストアンサー率45% (24/53)
回答No.1

・chompとchopが重複。 ・DNA配列を出力する行がない。(printの位置がおかしい) ・IDを出力する時に前に改行を入れないと、つながってしまう。 例えば、 while (<STDIN>){ if(/^>/){ print "\n"; print; }else{ chop; print; } };

spring921
質問者

お礼

参考になりました。 ありがとうございます。

関連するQ&A

  • perlのdo-while文で抜け出せない 

    perlのwhile,do-while,last文に関する質問です。 1) code1のようなプログラムを作ったのですが   eでdo_whileを抜け出すことができませんがなぜでしょうか。 ---code1(eで抜け出せない)(NG)--- my $sum=0; do{  my $a=<STDIN>;  chomp($a);  $sum=$sum+$a; }while($a ne 'e'); print $sum; -------------------------------- 2) 抜け出す方法をいろいろ試していたら   while(1)にしてlastで抜けるようにすると   code2ではeで抜け出すことができるように   なりましたが、   do~while(1)にしたcode3では、  「Can't "last" outside a loop block at …」C   というエラーが発生します。   code2とcode3はwhileがdo~whileになって   条件を見る位置がループの始めか終わりの   違いだけなのに、なぜ、code2ではOKで、   code3ではエラーになるのでしょうか。 ---code2(eで抜け出せる)(OK)----- my $sum=0; while(1) {  my $a=<STDIN>;  chomp($a);  last if ($a eq 'e');  $sum=$sum+$a; }; print $sum; --------------------------------- ---code3(エラーになる)(NG)----- my $sum=0; do{  my $a=<STDIN>;  chomp($a);  last if ($a eq 'e');  $sum=$sum+$a; }while(1); print $sum; --------------------------------- よろしくお願いします。 Windows7 , ActivePerl(v5.16.3)

    • ベストアンサー
    • Perl
  • perlスクリプト

    perlの勉強をしているものです。人様の作ったスクリプトを解析しています。以下のスクリプトについて質問があります。 while(chomp($in = <STDIN>)){ last if ($in eq "\cD"); print "$in"; } このスクリプトに出てきている、"\cD"の意味と、ifの前に出てきているlastの働きが分かりません。またこのスクリプトは全体としてどのような仕事をするのでしょうか?? 分かる方いらっしゃいましたら、ご教授いただけると幸いです。よろしくお願いします。

  • 数値に関しての質問です。

    $value = <STDIN>; chomp($value); if ($value >= 5) { print "5以上の数です。"; } else { print "5よりも小さい数です。"; } 上のperlを実行した時に、4.999999999999999 9が15個並んだときは、5よりも小 さいのですが、16個以上の時は5以上になってしまいます。 これってどういうことですか。 教えてください。

  • perlの制御文について

    汚くて申し訳ありません。 以下のようなperlのプログラムを組んだのですが制御文が思い通りに動きません。 比較対象の数字の先頭の0を取れば正常に動くのですがどうしても0をはずすことはできないのです。 いろいろ試してみたのですがどうしてもうまきかないので知恵を貸してください。 $input = <STDIN>; if($input > 0130){ print "A\n"; } elsif(($input > 0120)&&($input < 0130)){ print "B\n"; } else{ print "C\n"; }

  • perl で効率の良い素因数分解の方法

    以下は、N を素因数分解し、それにかかる時間を表示するプログラムです。 #!/usr/bin/perl -w use Benchmark; print("N=?"); chomp($n=<STDIN>); $start_time=new Benchmark; $i=2; while($i <= $n){ if($n%$i==0){ print("$i、"); $n = $n/$i; }else {$i++; } } $end_time=new Benchmark; $time=timediff($end_time,$start_time); print("このプログラムの実行時間は".timestr($time)."秒です。\n"); 確かに、このプログラムを用いれば、入力した数字を素因数分解し、それにかかった時間を表示させることができます。 しかしこの方法では、数字が大きくなると計算に時間がかかってしまい、効率がかなり悪くなってしまいます。 ヒントだけでも良いので、どなたかもっと効率の良い方法を教えていただけませんか。 よろしくお願い致します。

  • ファイルの入出力と改行

    縦100文字横70文字のデータが入ったデータファイルを横50文字にして並べ直したいと思い、まず試しに標準出力でそれがうまくいくかやってみたのですが、うまくいきません。もしお分かりであれば教えていください。よろしくお願いいたします。 #! /usr/bin/perl $filename = "reference.txt"; open HANDLE, "<$filename" or die "cannot open :$!"; print "open success\n"; @array = <HANDLE>; $count = 1; foreach $var (@array) { chomp $var; # print $var; if($count==50){ print $var, "\n"; } else{ print $var; } $count++; } close HANDLE; print "\n";

    • ベストアンサー
    • Perl
  • STDINがうまく動きません。

    次のようなスクリプトを書いて、Windows上でDOSプロンプトから scr.pl < aho.txt と実行しましたが何も出力されません。 エラーメッセージなども表示されません。 STDINのpipeが動いていないと思われるのですが、何か書き方に 問題があるのでしょうか? 教えてください。 よろしくお願いします。 #!/usr/bin/perl-w while (<STDIN>) { chomp; print $_; }

    • ベストアンサー
    • Perl
  • until文

    初歩的な質問ですみません。 file1 あいうえお かきくけこ さしすせそ たちつてと   ・   ・   ・   ・ なにぬねの はひふへほ まみむめも があります。 ・・・・の部分を消したくて、以下のようなプログラムを書いたのですが、 上手くいきません。 教えてください。お願いします。 @ARGV = ("file1"); $^I = ".bak"; while(<>){ $a = 0; chomp($_); if(/たちつてと/){ $a = 1; until(/なにぬねの/){ $a = 1; } }; if(/なにぬねの/){ $a = 0; }; if($a = 1){ }else{ print "$_\n"; }; };

    • ベストアンサー
    • Perl
  • perlで以下の記述の意味についてご助言願いたく。

    while( <$_old> ){ if( $_ =~ /^$var\:(?!\*RK\*)/ ){ print "A\n"; }else{ print "B\n"; } } 上記の上から2行目の if( $_ =~ /^$var\:(?!\*RK\*)/ ){ において、 ()の中の先頭に ?! とあるのですが、 これはどういう解釈なのでしょうか? ご助言ご鞭撻の程宜しくお願い致します。

    • ベストアンサー
    • Perl
  • perlのwhile,連想配列についてです。

    perlの連想配列を使い "AP" => "Apple" "BN" => "Banana" "OG" => "Orange" という値を格納します。 そしてこの格納した値をキーボードからの入力で取り出します。 このように表示したいです↓↓ "好きな果物を入力してください[AP/BN/OG]" そして入力を受けるとその果物の値を返し果物の名前を表示します↓↓ "あなたの好きな果物はAppleですね" ここまではできたのですが、この格納した果物以外を入力するとwhileで格納した果物が入力されるまで"3種類から選んでください”というようにループしたいです。 この場合どのように書けばよいのでしょうか。 whileの場合andで書きたい場合はどのように書けばよいのでしょうか。 また入力には<STDIN>を使い引数はchmopで処理すると良いとアドバイスを貰いましたがchompの使い道がよくわかりません。 そちらも説明していただけると幸いです。 わかりにくい質問ですがよろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう