perl:将多个文件作为数组输入

时间:2014-05-14 08:26:26

标签: arrays perl

我在不同的目录中有5个文件。我从所有文件中提取数据并将其作为新文件。

注意:将每个文件作为数组输入,并使用for循环为每个文件中的每个n提取数据。我想把它作为单个for循环来获取文件并处理其余的

对于file1 am使用

foreach (@file)
{
    my @temp = split(/\t/, trim($_));
    push(@output, $temp[0] . "\t" . $temp[1] . "\n");
}

foreach(uniq(@output))
{
    print $OUTPUTFILE $_;
}

我这样做五次处理五个文件。任何人都可以帮我解决如何简化

2 个答案:

答案 0 :(得分:1)

将其包装在外部循环中,迭代所有五个文件:

for my $file ( @five_files ) {

    open my $fh, '<', $file or die "Unable to open $file: $!";
    my @file = <$fh>;

    foreach (@file) {
        my @temp = split(/\t/, trim($_));
        push(@output, $temp[0] . "\t" . $temp[1] . "\n");
    }

    foreach(uniq(@output)) {
        print $OUTPUTFILE $_;
    }
}

由于您只对@temp的前两个元素感兴趣,因此可以简化foreach @file循环:

my @temp = split /\t/, trim($_), 2;
push @output, @temp, "\n" ;

答案 1 :(得分:0)

如果通过使用join展平@file数组来简化操作,该怎么办? 然后你可以将它拆分并处理清单。 例如:

!/usr/bin/perl

my @file = ("file1\tfile3 ","file1\tfile3\tfile3 ","file2");  # Some test data.

my $in = join "\t", @file;  # Make one string.
my @temp = split(" ", $in); # Split it on whitespace.


# Did it work?
foreach(@temp)
{
    print  "($_)\n";  # use () to see if we have any white spaces.
}

如果文件名中有空格,可能会出现问题!