我在不同的目录中有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 $_;
}
我这样做五次处理五个文件。任何人都可以帮我解决如何简化
答案 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.
}
如果文件名中有空格,可能会出现问题!