Chinaunix首页 | 论坛 | 博客
  • 博客访问: 629599
  • 博文数量: 149
  • 博客积分: 3901
  • 博客等级: 中校
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-16 14:33
文章分类

全部博文(149)

文章存档

2014年(2)

2013年(10)

2012年(32)

2011年(21)

2010年(84)

分类:

2010-08-05 14:11:06


x兄 :  单纯的用户登入数没什么感觉 , 看看能不能把每个月的新老用户数 分开取出来 , 我结合下 ?
我:    这个 有些麻烦 ,单纯从日志里 区分出 新老 用户数 ,我想办法吧 .
.......  脚本编写能区分新老用户的准备中 (脚本-1) ............
     通过 脚本一 我就可以判断 用户最早登入的时间(月),然后判断 这个用户在当前时间是否是新用户
.......  脚本编写能区分新老用户的准备中 (脚本-2) ............
当然 不是用 bdb 也可以 ( 脚本-3 )
x兄 : 感觉 新老用户 的操作 ,应该不太一样  ,抽样 下  新老用户 的具体操作
我 : ok



(脚本 - 1)

find login/ test_login/ -type f -exec cat {} \; |perl -nle ‘
 BEGIN{
   # 使用 bdb
   use BerkeleyDB;
   my $filename = "/tmp/new_old_adid.db";
   my $env = new BerkeleyDB::Env
         -Flags => DB_CREATE| DB_INIT_MPOOL
     || die "Cannot open environment: $BerkeleyDB::Error\n";
   my $db = tie (%h, "BerkeleyDB::Btree",
     -Filename => $filename,
     -Flags => DB_CREATE,
     -Env => $env)
   || die " Cannot open file $filename:$! $BerkeleyDB::Error\n";
 }
   
   if( /at=(\d{4}-\d{2}).*adid=(.*?)</ ){
      # bdb 内只存储 用户最早登入的 用户 时间 - 月
      # 以确保 这个用户能标识出 是新用户
      $h{ $2 }=$1 if $1 lt $h{ $2 } ;
   }


 



脚本 - 2


find login/ test_login/ -type f -name "*2010-08*" -exec cat {} \; |grep "wv=1.2" |perl -nle ‘

  BEGIN{
   # 使用 bdb

   use BerkeleyDB;
   my $filename = "/tmp/new_old_adid.db";
   my $env = new BerkeleyDB::Env
         -Flags => DB_CREATE| DB_INIT_MPOOL
     || die "Cannot open environment: $BerkeleyDB::Error\n";
   my $db = tie (%h, "BerkeleyDB::Btree",
     -Filename => $filename,
     -Flags => DB_CREATE,
     -Env => $env)
   || die " Cannot open file $filename:$! $BerkeleyDB::Error\n";
  }

  
  if(.*adid=(.*?)</ ){
     $all{$1}++ ;
     $new{$1}++ if $h{ $1 } eq $1 ;
  }


  END{
    print scalar keys %new,"\t",scalar keys %all ;
  }




脚本 -3

find login/ test_login/ -type f -exec cat {} \; |perl -nle ‘
 
 if( /at=(\d{4}-\d{2}-\d{2}).*adid=(.*?)<.*/ ){
   my $adid = $3;
   my $at = $1 ;
   
   $h{ $adid } = $at if not $h{$adid} ;
   $h{ $adid } = $at if $h{$adid} gt $at;
   
 }

 END{
   foreach my $adid (keys %h){
      print "$adid\t$h{$adid}";
   }
 }

’ |sort -u  > /tmp/adid_new_user.txt

# 再 分析时取出 /tmp/adid_new_user.txt 再装载到 map 里
  BEGIN{
    open FILE, "/tmp/adid_new_user.txt" or die $!;
      %adid_newday = {} ;
      while () {
         chomp;
         $adid_newday{$1} = $2 if /(.*?)\t(.*)/
      }
  }


阅读(569) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~