免费注册 查看新帖 |

Chinaunix

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

文本合成问题-help [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-04 15:59 |只看该作者 |倒序浏览
eg:
file  nodelist:
2  浙江
3  福建

file b:
2 20100301 7 12320
2 20100302 8 22528
2 20100303 7 16383

file c:
2 20100301 7 12
2 20100302 8 225
2 20100303 7 16
3 20100301 4264 2827943
3 20100302 3899 2640255
3 20100303 3905 2834327

file d:
3 20100301 4264 2827943
3 20100302 3899 2640255
3 20100303 3905 2834327

我想要的结果是 result
node       date     fileb里面的$3,$4  filec里面的$3,$4  filed里面的$3,$4
浙江   20100301    7 12320          7 12                        0  0
浙江   20100302    8 22528           8 225                     0   0
浙江   20100303    7 16383           7 16                       0   0
福建   20100301    0  0                 4264 2827943    4264 2827943
福建   20100302    0  0                 3899 2640255    3899 2640255
福建   20100303   0   0                 3905 2834327    3905 2834327



今天早上我发贴的时候得到这么个代码
awk -v day=`date +%Y%m%d` 'BEGIN{d1=substr(day,1,6);d2=substr(day,7,2)}!a[$1]++{b[++n]=$2}END{for (i=1;i<=n;i++) for (j=1;j<d2+0;j++) printf "%s %s%02d\n",b[i],d1,j}'  nodelist

这部分命令实现了
--------
浙江 20100301
浙江 20100302
浙江 20100303
福建 20100301
福建 20100302
福建 20100303


后面的该怎么继续,我是菜鸟,需要帮助,非常感谢。

论坛徽章:
0
2 [报告]
发表于 2010-03-04 16:26 |只看该作者
我从shell版里得到答案了。[]

论坛徽章:
0
3 [报告]
发表于 2010-03-04 17:37 |只看该作者
回复 1# 拖拉机商人


    贴个perl代码给你吧。
  1. use Data::Dumper;
  2. use strict;

  3. open Fn,"file.note" or die "cant open file file.note!";
  4. open Fb,"file.b" or die "cant open file file.b!";
  5. open Fc,"file.c" or die "cant open file file.c!";
  6. open Fd,"file.d" or die "cant open file file.d!";

  7. my %node = map {(split)[0,1]}<Fn>;
  8. my %all;
  9. my %b;
  10. my %c;
  11. my %d;
  12. while(<Fb>){
  13.   my @bsp=(split) ;
  14.   $b{$bsp[0]}->{$bsp[1]}=[$bsp[2],$bsp[3]];
  15.   $all{$bsp[0]}->{$bsp[1]}=[0,0,0,0,0,0];
  16. }

  17. while(<Fc>){
  18.   my @bsp=(split) ;
  19.   $c{$bsp[0]}->{$bsp[1]}=[$bsp[2],$bsp[3]];
  20.   $all{$bsp[0]}->{$bsp[1]}=[0,0,0,0,0,0];
  21. }

  22. while(<Fd>){
  23.   my @bsp=(split) ;
  24.   $d{$bsp[0]}->{$bsp[1]}=[$bsp[2],$bsp[3]];
  25.   $all{$bsp[0]}->{$bsp[1]}=[0,0,0,0,0,0];
  26. }

  27. foreach my $area(keys %all){
  28.   foreach my $data(keys %{$all{$area}}){
  29.     $all{$area}->{$data}->[0]=($b{$area}->{$data}->[0] or 0);
  30.     $all{$area}->{$data}->[1]=($b{$area}->{$data}->[1] or 0);
  31.     $all{$area}->{$data}->[2]=($c{$area}->{$data}->[0] or 0);
  32.     $all{$area}->{$data}->[3]=($c{$area}->{$data}->[1] or 0);
  33.     $all{$area}->{$data}->[4]=($d{$area}->{$data}->[0] or 0);
  34.     $all{$area}->{$data}->[5]=($d{$area}->{$data}->[1] or 0);
  35.   }
  36. }

  37. foreach my $area(sort keys %all){
  38.   foreach my $data(sort keys %{$all{$area}}){
  39.     my $a1 = $all{$area}->{$data}->[0];
  40.     my $a2 = $all{$area}->{$data}->[1];
  41.     my $a3 = $all{$area}->{$data}->[2];
  42.     my $a4 = $all{$area}->{$data}->[3];
  43.     my $a5 = $all{$area}->{$data}->[4];
  44.     my $a6 = $all{$area}->{$data}->[5];
  45.     print "$area        $data        $a1        $a2        $a3        $a4        $a5        $a6 \n";
  46.         }
  47. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-03-05 11:05 |只看该作者
谢谢。perl看起来真是养眼。
测试通过了
欠一点的是:node,没有做到用中文替代相应的中文地点。
不过已经很完美了
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP