Это продолжение до Как мне усреднить значения столбца из файла данных, разделенных табуляцией, игнорируя строку заголовка и левый столбец? .Задача была: открыть и прочитать файл;дойти до каждой строки, разбить содержимое на массив и вычислить среднее числовых значений;и, наконец, записать в новый файл средние значения для каждого из столбцов, содержащих числовые значения.
Кажется, все хорошо до конечной точки.Проблема в том, что, хотя я могу создать новый файл .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
или каким-то образом, который я могу прочитать какпоказанный в командной строке будет высоко ценится.Кроме того, хотя я смутно знаю, что происходит на каждом этапе кода, я был бы признателен за более глубокое понимание того, что происходит на большинстве этапов, если это возможно.Я все еще читаю это, но более тонкие детали, которые я хочу, чтобы иметь возможность понять ясно.