如何用perl读取一个文件夹下的大量首列相同的txt文件,要进行列合并。

急求~~~!!!如何用perl处理500多个的首列相同的txt文件,要进行列合并。每个txt文件行数相同,只有2列数据。需要把每一个文件第二列数据按列合并成一个txt文件... 急求~~~!!!如何用perl处理500多个的首列相同的txt文件,要进行列合并。
每个txt文件行数相同,只有2列数据。需要把每一个文件第二列数据按列合并成一个txt文件~
展开
 我来答
自由de王国
2014-03-07 · TA获得超过1066个赞
知道小有建树答主
回答量:661
采纳率:50%
帮助的人:842万
展开全部
二维数组
把每个文件的每一行split成两个元素,然后把第二个元素(也就是第二列的数据)加到二维数组中,并且保证不同文件中行数相同的列在同一个子数组中(说的有点绕,希望你懂)。输出的时候直接用换行符join
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
76de1
推荐于2016-11-17 · TA获得超过1158个赞
知道小有建树答主
回答量:666
采纳率:100%
帮助的人:494万
展开全部
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";}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白垩纪屠龙英雄
2014-03-07 · TA获得超过1186个赞
知道小有建树答主
回答量:487
采纳率:0%
帮助的人:274万
展开全部
目录 :/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");
}
供参考
更多追问追答
追问
文件共有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");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式