如何用perl读取一个文件夹下的大量首列相同的txt文件,要进行列合并。
急求~~~!!!如何用perl处理500多个的首列相同的txt文件,要进行列合并。每个txt文件行数相同,只有2列数据。需要把每一个文件第二列数据按列合并成一个txt文件...
急求~~~!!!如何用perl处理500多个的首列相同的txt文件,要进行列合并。
每个txt文件行数相同,只有2列数据。需要把每一个文件第二列数据按列合并成一个txt文件~ 展开
每个txt文件行数相同,只有2列数据。需要把每一个文件第二列数据按列合并成一个txt文件~ 展开
3个回答
展开全部
二维数组
把每个文件的每一行split成两个元素,然后把第二个元素(也就是第二列的数据)加到二维数组中,并且保证不同文件中行数相同的列在同一个子数组中(说的有点绕,希望你懂)。输出的时候直接用换行符join
把每个文件的每一行split成两个元素,然后把第二个元素(也就是第二列的数据)加到二维数组中,并且保证不同文件中行数相同的列在同一个子数组中(说的有点绕,希望你懂)。输出的时候直接用换行符join
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
opendir D,"1" or die $!; #把所有txt文件都放到一个叫1的文件夹中
@array=grep(/\.txt/,readdir D);
foreach $list(@array){
open F, "1/$list" or die $!;
@load=<F>;
foreach (@load){ ($s1,$s2)=split/\s+/,$_;push @new,$s2;}
}
foreach(@new){print "$_\n";}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
目录 :/dir/
文件:a1.txt,a2.txt,a3.txt...an.txt
代码:
$files = globe("/dir/*.txt");
%res
foreach $file($files){
$FH= IO::File->new("<$file");
whlie($line = $FH->getline()){
($key,$value) = split(/\s+/,$line);
@array = $res{$key};//严谨点加个undef判断吧,懒得写了
push(@array,$value);
$res{$key} = @array;
undef @array;
}
}
$out = IO::File->new(">res.txt")
foreach $key (keys(%res)){
$out->print("$key ".join(" ",$res{$key})."\n");
}
供参考
文件:a1.txt,a2.txt,a3.txt...an.txt
代码:
$files = globe("/dir/*.txt");
%res
foreach $file($files){
$FH= IO::File->new("<$file");
whlie($line = $FH->getline()){
($key,$value) = split(/\s+/,$line);
@array = $res{$key};//严谨点加个undef判断吧,懒得写了
push(@array,$value);
$res{$key} = @array;
undef @array;
}
}
$out = IO::File->new(">res.txt")
foreach $key (keys(%res)){
$out->print("$key ".join(" ",$res{$key})."\n");
}
供参考
更多追问追答
追问
文件共有110M能在windows下运行么
追答
理论上可以运行。IO::File->getline()是逐行读取,占用内存不算太大。
你尝试运行一下不就知道了。
文件数量比较多,可以加一行用来debug
$files = globe("/dir/*.txt");
%res
foreach $file($files){
print("$file");//加一行打印文件名,可以了解是否一直在执行。免得进程死了都不知道
$FH= IO::File->new("getline()){
($key,$value) = split(/\s+/,$line);
@array = $res{$key};//严谨点加个undef判断吧,懒得写了
push(@array,$value);
$res{$key} = @array;
undef @array;
}
}
$out = IO::File->new(">res.txt")
foreach $key (keys(%res)){
$out->print("$key ".join(" ",$res{$key})."\n");
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询