免费注册 查看新帖 |

Chinaunix

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

请教一个问题!如何实现文件间内容的提取。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-12 13:24 |只看该作者 |倒序浏览
两个文件:
两个文件第一列是对应的名字,从第二个文件,按照位置从第一个文件对应的位置提取值,生成如第三个文件的形式。

FILE1:

NAME1    A     B       C      D     E
NAME2    E     F       A      B      F
NAME3    E     D      A       D     G
……
FILE2:

NAME1     0     1
NAME2     
NAME3     2     3      4
……
得到结果如下形式
FILE3:

NAME1      0=>A     1=>B
NAME2      
NAME3      2=>A     3=>D     4=> G
……

论坛徽章:
0
2 [报告]
发表于 2012-09-12 15:28 |只看该作者
本帖最后由 yizhengming 于 2012-09-12 15:51 编辑
  1. #! /usr/bin/perl  -w
  2. use strict;
  3. open FD1, "file1";
  4. my %hash;
  5. while (<FD1>) {
  6.     chomp;
  7.     my @tmp = split;
  8.     $hash{ $tmp[0] } = [@tmp[1..$#tmp]];
  9. }
  10. open FD2, "file2";
  11. open FD3, ">file3";
  12. while (<FD2>) {
  13.     my $name;
  14.     while (not /\G\z/gc) {
  15.         if (/\G(name\d+)/gci and $name = $1) {print FD3 $name}
  16.         elsif (/\G(\s+)/gc)  {print FD3 $1}
  17.         elsif (/\G(\d+)/gc) {print FD3 "$1=>$hash{ $name }->[$1]"}
  18.     }
  19. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-09-12 16:11 |只看该作者
回复 1# lwenhack
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. open my $fh1, "<", $file1 or die($!);
  5. open my $fh2, "<", $file2 or die($!);

  6. my %hash;
  7. while (<$fh1>) {
  8.     my ($name,@array) = split;
  9.     $hash{$name}->{array} = [ @array ];
  10. }

  11. while (<$fh2>) {
  12.     my ($name,@index) = split;
  13.     $hash{$name}->{index} = [ @index ];
  14. }
  15. close($fh1);
  16. close($fh2);

  17. foreach my $name ( sort keys %hash ) {
  18.     print join("\t", $name,
  19.               map { "$_ => $hash{$name}{array}[$_]" }
  20.                  @{ $hash{$name}{index} }
  21.               ), "\n";
  22. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-09-12 17:01 |只看该作者
3楼正解,呵呵,谢谢!帮我大忙了。
2楼的也非常好。非常谢谢!

论坛徽章:
0
5 [报告]
发表于 2012-09-12 17:03 |只看该作者
map,hash的数组,向各位学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP