我目前刚接触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;从我的阵列。 我能得到一些指导吗?
答案 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+/
。say
与print
类似,只是它隐式添加换行符。它会自动启用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