免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發新帖
查看: 44915 | 回復: 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 非常好用,謝謝高手。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則 發表回復

  

北京盛拓優訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP
   日韩综合区视频第一页导航,无码JK粉嫩小泬在线观看,午夜精品A片一区二区三区,日日躁夜夜躁狠狠躁麻豆,大胆国模,免费观看无遮挡www的网站