我有一些带有大量行的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
非常感谢!!!
答案 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