这是How do I average column values from a tab-separated data file, ignoring a header row and the left column?的后续行动。任务是:打开并阅读文件;到达每一行,将内容分割成数组,并计算数值的平均值;最后将新的文件写入每个包含数值的列的平均值。为什么我在输出文件中看不到计算结果?
所有似乎都很好,直到最后一点。问题是,尽管我可以创建一个新的文件,但.txt
文件本身没有在输出中打印的内容。最好,作为Perl的新用户,我宁愿将脚本保留在下面写的样式中,以便更好地理解它。我可能不太适合那些更简洁的版本,可能会在那里。感谢jchips12是相当有帮助的。
不管怎样,代码:从文件Lab1_table.txt
#!/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;
的数据来如下:
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 – 2012-03-16 02:18:27
@PkC:看起来,网站管理员已取消我们上次的讨论。如果您发现此评论,则完成的脚本位于[http://derivations.org/acgt.txt]。我的电子邮件(我将很快从这里删除)是gmail dot com的tbtkorg。 – thb 2012-03-18 05:21:34