1

私はPerlプロセスに非常に慣れていません。私は学習曲線と Perl をとても楽しんでいますが、信じられないほどフラストレーションを感じており、1 つのタスクに何時間も費やしてきましたが、ほとんどまたはまったく結果が得られませんでした。

#!/usr/bin/perl

use strict;
print "Average value of retroviruses for the length of each genome and each of the                     genes:\n"; #create a title for the script
my $infile = "Lab1_table.txt"; # This is the file path.
open INFILE, $infile or die "Can't open $infile: $!"; # Provides an error message if      the file can'tbe found.

# set my initial values.
my $tally = 0;
my @header = ();
my @averages = ();



 # create my first loop to run through the file by line.
while (my $line = <INFILE>){
chomp $line;
print "$line\n";

# add one to the loop and essentially remove the header line of value.
# the first line is what was preventing me from caclulating averages as Perl can't    calculate words.

my @row = split /\t/, $line; # split the file by tab characters.
$tally++; #adds one to the tally.
    if ( $tally == 1 ) { #if the tally = 1 the row is determined as a the header.
    @header = @row;
}

# if the tally is anything else besides 1 then it will read those rows.
else {
    for( my $i = 1; $i < scalar @row; $i++ )  {
        $averages[$i] += $row[$i];
}

foreach my $element (@row){
}

foreach my $i (0..4){
    $averages[$i] = $averages[$i] + $row[1..4];

}
 }
 }

 print "Average values of genome, gag, pol and env:\n";

 for( my $i = 1; $i < scalar @averages; $i++ ) { # this line is used to determine the      averages of the columns and print the values
print $averages[$i]/($tally-1), "\n";
 }

だから、私が望んでいたものを思いつく結果を得ました(私が望んでいた正確な形式ではありませんが、現時点で得られるように見えるほど近いです)、それらは列を平均化します.

問題は現在、アウトファイルへの書き込みです。前のコードからテーブルと結果を出力ファイルに表示しようとしています。適切なファイル名が得られますが、結果がありません。

  foreach my $i (1){
  my $outfile= "Average_values".".txt";
  open OUTFILE, ">$outfile" or die "$outfile: $!";
  print "Average values of genome, gag, pol and env:\n";
  }
  close OUTFILE;    



  close INFILE;

これには簡単な方法と難しい方法があるように感じますが、私は非常に難しい方法を採用しました。どんな助けでも大歓迎です。

4

1 に答える 1