如何编写从另一个文件读取的Perl脚本?

如何编写从另一个文件读取的Perl脚本?,perl,statistics,Perl,Statistics,我想写一个Perl脚本,读取一个包含数字列的file.txt文件 20 30 12 31 20 54 63 30 21 11 12 10 然后做一些计算,比如平均值。我不知道如何声明和初始化它。 我有一个例子,在这个例子中,它寻找中间值,它声明了数据,在我的例子中,数据在一个文件中,而不是在脚本中,并且想要计算中间值。 就在那里。。 #!/usr/bin/perl #data points @vals = ( 33, 23, 55, 39, 41, 46, 38, 52, 3

我想写一个Perl脚本,读取一个包含数字列的file.txt文件

20  30  12
31  20  54
63  30  21
11  12  10
然后做一些计算,比如平均值。我不知道如何声明和初始化它。 我有一个例子,在这个例子中,它寻找中间值,它声明了数据,在我的例子中,数据在一个文件中,而不是在脚本中,并且想要计算中间值。 就在那里。。 #!/usr/bin/perl

#data points 
@vals = ( 33, 23, 55, 39, 41, 46, 38, 52, 34, 29, 27, 51, 33, 28 ); 
print "UNSORTED: @vals\n"; 

#sort data points 
@vals = sort(@vals); 
print "SORTED: @vals\n"; #test to see if there are an even number of data points 
if( @vals % 2 == 0) { 

#if even then: 
$sum = $vals[(@vals/2)-1] + $vals[(@vals/2)]; 
$med = $sum/2; 
print "The median value is $med\n";
}
else{ 
#if odd then: 
print "The median value is $vals[@vals/2]\n";
} 
exit;

此外壳一衬层将第一列与第二列相乘:

perl -lane 'print $F[0] * $F[1]' <FILE>

使用命令。该页面上有很多很好的示例。

以下是建议使用的函数(请参阅):

  • 打开文件阅读:使用
    Open
    功能
  • 循环遍历每一行:
    while(my$line=)
  • 删除尾部换行符:使用
    chomp
  • 从每行提取值:使用
    split
    功能
  • 将值存储在数组中:使用
    push
  • 要验证阵列是否具有所需的结尾,请执行以下操作:

    use Data::Dumper;
    print Dumper \@vals;
    
    使现代化 在不给出完整答案的情况下(因为这是家庭作业),请查看函数引用的每个条目中的示例代码

    以下是一些让您开始学习的内容:

    open my $filehandle, '<', $filename
        or die "Couldn't open $filename";
    while (my $line = <$filehandle>) {
        # do stuff with $line
    }
    close $filehandle;
    

    打开我的$filehandle,'谢谢你的回答。我想做一些计算。例如:要初始化,只需将“my”添加到数组中:my@vals=。。。。您还应该使用:“使用严格;使用警告”;并缩进代码!谢谢这很有效。你是一个伟大的人。(只有一个小问题,对于脚本,它给出的是行的中间值,而不是列的中间值),但很好,我会设法解决它。再次感谢。如果你觉得回复很有用,你可以“向上投票”。如果它符合您的需要,您应该“接受”回复,这就是stackoverflow的工作原理,谢谢;)这听起来很有趣,你能修改我的脚本并在上面添加一些函数吗。谢谢
    
    use Data::Dumper;
    print Dumper \@vals;
    
    open my $filehandle, '<', $filename
        or die "Couldn't open $filename";
    while (my $line = <$filehandle>) {
        # do stuff with $line
    }
    close $filehandle;