免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2630 | 回复: 6
打印 上一主题 下一主题

求助:通过文件1中的内容在文件2中查找键,并输出其对应的值~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-28 16:25 |只看该作者 |倒序浏览
本帖最后由 linghu002127 于 2011-11-28 16:26 编辑

手上有2文件,内容如下:

file1
  1. 1        A1
  2. 2        A2
  3. 3        A3
  4. 4        A4
  5. 5        A5
  6. 5        B1
  7. 7        B2
  8. 8        B3
  9. 9        B4
  10. 10        B5
  11. 11        C1
  12. 12        C2
  13. 13        C3
  14. 14        C4
复制代码
file2
  1. 4        3        5        7        11        9        1        6        10
  2. 2        8        6        13        12        3        9        5        1
  3. 7        14        10        6        1        5        8        12        4
复制代码
想根据file2中得每一行的数值去跟file1中第一列的数值做比较,如果相同,就输出file1中这个数值后边一列对应的字符。例如,file2第一行的第二个数3对应在file1中第3行,就输出A3.
最后完整的输出结果为:
  1. A4        A3        A5        B2        C1        B4        A1        B1        B5
  2. A2        B3        B1        C3        C2        A3        B4        A5        A1
  3. B2        B3        B5        B1        A1        A5        B3        C2        A4
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-11-28 16:32 |只看该作者
本帖最后由 linghu002127 于 2011-11-28 17:33 编辑

谢谢~
看看书后基本解决了

论坛徽章:
0
3 [报告]
发表于 2011-11-28 17:33 |只看该作者
  1. open(input,"file1.txt");
  2. chomp(@array=<input>);
  3. %hash=map{split(/\t/)}@array;
  4. close(input);

  5. open(input,"file2.txt");
  6. open(output,">out.txt");

  7. while(<input>)
  8. {
  9.         chomp;
  10.         s/(\d+)/$hash{$1}/eg;
  11.         print output $_,"\n";
  12. }

  13. close(input);
  14. close(output);
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-11-28 17:35 |只看该作者
思路没有问题,就是稍麻烦了些~
  1. use strict;
  2. use warnings;

  3. open FILEA,"<file1.txt" or die "$!";
  4. open FILEB,"<file2.txt" or die "$!";

  5. my %h;

  6. while (<FILEA>) {
  7. my ($cola,$colb)=split;
  8. $h{$cola}=$colb;
  9. };

  10. while (<FILEB>) {
  11. s/(\d+)/$h{$1}/g;
  12. print;
  13. }
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
5 [报告]
发表于 2011-11-28 17:55 |只看该作者
回复 4# x9x9
  1. s/(\d+)/$h{$1}/g;
复制代码
漂亮!!

论坛徽章:
0
6 [报告]
发表于 2011-11-28 22:11 |只看该作者
本帖最后由 shuijingfeijiji 于 2011-11-28 22:39 编辑

回复 4# x9x9


    抱歉,这句s/(\d+)/$h{$1}/g;不太明白是什么意思 ,尤其$h{$1}

论坛徽章:
0
7 [报告]
发表于 2011-11-29 00:22 |只看该作者
本帖最后由 afukada 于 2011-11-29 00:23 编辑

回复 6# shuijingfeijiji


    把括號裡面的值當成hash的key來求value
   
    然後再用value代換括號裡的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP