免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 48702 | 回复: 9

[已解决]~~用perl将几个txt文件按照每个文件第一列相同名字合并,谢谢 [复制链接]

论坛徽章:
0
发表于 2015-09-24 09:35 |显示全部楼层
本帖最后由 baiguihuajl 于 2015-09-29 13:51 编辑

如何用perl,按照每个文件第一列的名字将很多个txt文件合并,并且保留第一列存在相同名字的数值:
如将文件1.txt和2.txt和3.txt...合并
1.txt:
a        1
b        2
c        3
d        4
e        5
2.txt:
a        2
c        5
d        2
e        1
f        2
3.txt:
b        3
c        5
d        2
e        5
s        5
合并成:
c        3        5        5
d        4        2        2
e        5        1        5


论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
发表于 2015-09-24 10:01 |显示全部楼层
试试用HASH

论坛徽章:
0
发表于 2015-09-24 14:43 |显示全部楼层
能具体告诉我这么写代码吗?虽然知道哈希,但是不知道怎么用,而且将多个txt文件合并的循环也不会。。。谢谢哈~
回复 2# b114213903


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2015-09-24 17:56 |显示全部楼层
本帖最后由 MMMIX 于 2015-09-24 17:57 编辑

回复 3# baiguihuajl


    先别想 hash 或是循环什么的了。这个问题你倒是有思路没有呀?没有思路(逐步描述的伪代码),就先去想思路;想清楚,有思路了,直接把它翻译成 Perl 代码就完了。要是翻译过程中有什么问题,可以发贴问。

论坛徽章:
0
发表于 2015-09-25 13:52 |显示全部楼层
一个思路
  1. use 5.010;
  2. my $c = 1 + @ARGV;
  3. while (<>) {
  4.     ( $a, $b ) = split;
  5.     push @{ $_{$a} ||= [$a] }, $b;
  6. }
  7. $c - @$_ or say join "\t", @$_ for values %_;
复制代码
perl join.pl 1.txt 2.txt 3.txt 4.txt 5.txt

论坛徽章:
0
发表于 2015-09-25 14:14 |显示全部楼层
好的,谢谢~~~回复 4# MMMIX


   

论坛徽章:
0
发表于 2015-09-25 14:17 |显示全部楼层
可以做出来,太感谢你了,我还要琢磨一下每句话什么意思~~~回复 5# ba_du_co


   

论坛徽章:
0
发表于 2015-09-25 14:46 |显示全部楼层
  1. for($i=1;$i<=4;$i++){
  2.         open(DATA,"$i.txt");
  3.         while(<DATA>){
  4.                 chomp;
  5.                 @line=split(/\t/,$_);
  6.                 if($i == 1){
  7.                         $hash{$line[0]}=$line[1];
  8.                         $num{$line[0]}=1;       
  9.                 }else{
  10.                         if(exists $hash{$line[0]}){
  11.                                 $hash{$line[0]}.="\t".$line[1];
  12.                                 $num{$line[0]}++;
  13.                         }
  14.                 }
  15.         }
  16.         close(DATA);
  17. }

  18. foreach(keys %num){
  19.         if($num{$_} == 4){
  20.                 print "$_\t$hash{$_}\n";
  21.         }
  22. }
复制代码
还有一个比较容易看懂的代码~~~

论坛徽章:
0
发表于 2021-03-10 09:00 |显示全部楼层
perl 非常好用,谢谢高手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP