将多个文件添加到perl中的数组

时间:2017-02-27 08:22:22

标签: arrays list perl

我有一些带有大量行的txt文件,如:

file_1.txt        file_2.txt      file_3.txt
XP_001703830.1    XP_001703820.1  XP_001703810.1
XP_001703836.1    XP_001703815.1  XP_001703805.1
XP_001703844.1    XP_001703834.1  XP_001703844.1

让我们说我在一个文件夹中有10个或更多文件,我想要阅读所有这些文件并将内容存储在一个数组中,我使用了这个代码,但它只存储了一行代码文件,而不是所有的行!!

#!/usr/bin/perl -w
use strict;

my @files = glob("*.txt");
my @ID;

for my $file(@files) {
    open IN, '<', $file or die "$!";
        while (<IN>) {
            my $fields = $_;
            push @ID, $fields;
        }
}

foreach (@ID){
    print "$_\n";
}
close IN;
exit;

我想要的是将所有行存储在数组中,如:

XP_001703830.1      
XP_001703836.1      
XP_001703844.1      
XP_001703820.1
XP_001703815.1
XP_001703834.1
XP_001703810.1
XP_001703805.1
XP_001703844.1

非常感谢!!!

3 个答案:

答案 0 :(得分:3)

如果你正在将整个内容读入内存(通常不是RAM的最佳用途)那么你可以这样做... perl TIMTOWTDI

my @ID;
{
    local(@ARGV) =  glob("*.txt");
    @ID=<>;
}
print "@ID\n";

答案 1 :(得分:1)

通过将默认输入分隔符初始化为undef,可以解决此问题,

use strict;
my @files = glob("*.txt");
my @ID;

for my $file(@files) {
    open IN, '<', $file or die "$!";
    while (<IN>) {
        my $fields = do{local $/; <IN>};
        push @ID, $fields;
    }
}

foreach (@ID){
    print "$_\n";
}
close IN;
exit;

答案 2 :(得分:0)

我猜你的线路终结器有问题。尝试

open IN, '<:crlf', $file