免费注册 查看新帖 |

Chinaunix

  平台 申博游戏下载 博客 文库
最近访问板块 发新帖
查看: 7397 | 回复: 9
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2015-09-24 10:01 |只看该作者
试试用HASH

论坛徽章:
0
3 [报告]
发表于 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
4 [报告]
发表于 2015-09-24 17:56 |只看该作者
本帖最后由 MMMIX 于 2015-09-24 17:57 编辑

回复 3# baiguihuajl


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

论坛徽章:
0
5 [报告]
发表于 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
6 [报告]
发表于 2015-09-25 14:14 |只看该作者
好的,谢谢~~~回复 4# MMMIX


   

论坛徽章:
0
7 [报告]
发表于 2015-09-25 14:17 |只看该作者
可以做出来,太感谢你了,我还要琢磨一下每句话什么意思~~~回复 5# ba_du_co


   

论坛徽章:
0
8 [报告]
发表于 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
9 [报告]
发表于 2021-03-10 09:00 |只看该作者
perl 非常好用,谢谢高手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2021中国系统架构师大会

【数字转型 架构重塑】2021年5月20日-22日第十三届中国系统架构师大会将在云端进行网络直播。

大会为期3天的议程,涉及20+专场,近120个主题,完整迁移到线上进行网络直播对会议组织来说绝非易事;但考虑到云端会议的直播形式可以实现全国各地技术爱好者的参与,也使ITPUB作为技术共享交流平台得到更好的普及,我们决定迎难而上。
http://sbyxxz.psb828.com/


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - 申博游戏下载
  
网站地图 申博太阳城注册 申博现金网址 百家乐真人游戏 申博登录不了
申博游戏手机下载 太阳城申博娱乐城 申博游戏官网登入 菲律宾申博真人娱乐
申博官网登录 申博太阳城登入 ag真人娱乐 申博代理开户
真钱百家乐 幸运大转盘 申博138开户 申博太阳城直营网
申博官方网址 ag国际馆 太阳城登入 申博游戏下载