Perl在表格中打印超出第一行的行

时间:2017-06-02 04:09:40

标签: perl

我目前刚接触perl ....

所以我有一张桌子:

Name        Age    
Steven      18
Joe         19
Peter       20

我想让我的脚本打印出' Name'下的行。在第一列 所以当我运行脚本时它会是这样的:

Steven    
Joe
Peter

我的脚本看起来像这个atm:

#!/usr/bin/perl
use strict;  
use warnings;

my $file=$ARGV[0];

my @array;
my $line;
my $row;

open (File, "< $file") or die "Input file: $!";

@array = <File>;

foreach $line (@array)
{
    my @array1 = split(/\s+/, "$line");
    my @row=split(/\s+/, "$array1[0]");

    print $row[1];
}    

当我运行它时,我似乎无法打印出字符串&#39; Steven&#39;从我的阵列。 我能得到一些指导吗?

2 个答案:

答案 0 :(得分:4)

Modern Perl的方式执行此操作:

use strict;
use warnings;
use 5.010;

while (<DATA>) {
    next if $. == 1;
    my ($name, $age) = split;
    say $name;
}

__DATA__
Name        Age
Steven      18
Joe         19
Peter       20

注意:

  • 您通常希望避免将整个文件读入内存,如果可以避免它,在这种情况下,您可以避免它。
  • 我们使用$. the current line number for the last filehandle accessed跳过标题行。
  • split的参数被省略时,它会作用于$_并在' '上拆分,这会在拆分前删除前导空格,并将模式视为/\s+/
  • sayprint类似,只是它隐式添加换行符。它会自动启用use 5.010或更高版本。

答案 1 :(得分:1)

其中一条线是多余的:

my @array1 = split(/\s+/, "$line");
my @row=split(/\s+/, "$array1[0]");

这可以按照需要运作:

#!/usr/bin/perl
use strict;
use warnings;

my $file=$ARGV[0];
my @array;
my $line;
my $row;

@array = <DATA>;
my $isContent = 0;
foreach $line (@array)
{
    my @row = split(/\s+/, $line);
    next if not @row;
    next if not $isContent++;
    print "$row[0]\n";
}   

__DATA__

Name        Age
Steven      18
Joe         19
Peter       20