Это последующая деятельность после How do I average column values from a tab-separated data file, ignoring a header row and the left column?. Задача: открыть и прочитать файл; дойти до каждой строки, разделить содержимое на массив и вычислить среднее числовые значения; и, наконец, записать в новый файл средние значения для каждого из столбцов, содержащих числовые значения.Почему я не вижу вычисленных результатов в моем выходном файле?
Все, кажется, хорошо до последней точки. Проблема в том, что я могу создать новый файл .txt
, сам файл .txt
не имеет того, что напечатано на выходе. Предпочтительно, как новый пользователь Perl, я бы предпочел сохранить сценарий в стиле, написанном ниже, чтобы я мог лучше понять его. Я не так хорош с более сжатыми версиями, которые потенциально могут быть там. Благодаря jchips12 за то, что он значительно полезен.
Во всяком случае, код:
#!/usr/bin/perl -w
use strict;
my $infile = "Lab1_table.txt"; # This is the file path
open INFILE, $infile or die "Can't open $infile: $!";
my $outfile = "Lab1_tableoutput.txt";
open OUTFILE, ">$outfile" or die "Cannot open $outfile: $!";
my $count = 0;
my @header =();
my @average =();
while (<INFILE>) {
chomp;
my @columns = split /\t/;
$count++;
if ($count == 1) {
@header = @columns;
} else {
for(my $i = 1; $i < scalar @columns; $i++) {
$average[$i] += $columns[$i];
}
}
}
for(my $i = 1; $i < scalar @average; $i++) {
print $average[$i]/($count-1), "\n";
}
print OUTFILE "\n";
close OUTFILE;
данные пришли из файла Lab1_table.txt
следующим образом:
retrovirus genome gag pol env
HIV-1 9181 1503 3006 2571
FIV 9474 1353 2993 2571
KoRV 8431 1566 3384 1980
GaLV 8088 1563 3498 2058
PERV 8072 1560 3621 1532
В результате производит правильные средние значения, хотя и немного грязный в терминале и они не помечены как соответствующие любому номеру столбца/имени. Также создается файл .txt
, но без вывода.
Результаты вышли как:
Argument "" isn't numeric in addition (+) at line 25, <INFILE> line X
0
8649.2
1509
3300.4
2142.4
***Line X: Where X is either 2, 3, 4, 5, or 6.***
Из этого я могу сделать вывод, что ошибки «Аргумент» имеют в виду заголовков столбцов 5, и 0
к единственной колонке с нечисловых значений.
Помогите с получением файла для записи в файл .txt
или каким-либо способом, который я могу прочитать, как показано в командной строке, будет очень признателен. Кроме того, хотя я смутно знаю, что происходит на каждом этапе кода, я был бы признателен за более глубокое понимание того, что происходит на большинстве шагов, если это возможно. Я все еще его читаю, но более тонкие детали я хочу четко понять.
См. Мой комментарий ниже. Я думаю, вы можете исправить это, используя шаблон: \ t + вместо \ t –
@PkC: Кажется, модератор сайта отменил наше последнее обсуждение. Если вы найдете этот комментарий, заполненный скрипт находится в [http://derivations.org/acgt.txt]. Мой e-mail (который я скоро удалю отсюда) - tbtkorg в gmail dot com. – thb