设为首页 收藏本站
查看: 1592|回复: 0

[经验分享] perl脚本学习笔记

[复制链接]

尚未签到

发表于 2018-9-1 10:26:07 | 显示全部楼层 |阅读模式
#!/usr/bin/perl  my $totaltimes=0;  //定义变量
  my %tong_visit_times; //定义散列
  my %tong_unique_users;
  my %userlist;
  my %tongidall;
  my $totalusers=0;
  my $totaltongs=0;
  my ($logfile)=@ARGV; //传递脚本的参数给变量
  if(-e $logfile){
  &readlogfile($logfile); //子程序调用
  }
  #here read_tong
  &read_tongs();
  $activeusers=(keys(%userlist));  //取散列的关键字的数量,keys在标量上下文中返回key的数量
  $activetongs=(keys(%tong_visit_times));
  print "总活动人次:".$totaltimes."\n";
  print "活动用户数:".$activeusers."占总用户$totalusers的".(100*$activeusers/$totalusers)."%\n";
  print "涉及到桶数:".$activetongs."占总桶数$totaltongs的".(100*$activetongs/$totaltongs)."%\n";
  print "------------------------\n";
  open(USER,">last".$days."day.txt");             //定义文件句柄USER,输出到last$daysday.txt
  foreach $key(keys %userlist){
  print USER $key.":".$userlist{$key}."\n";
  @i=split(/\|/,$userlist{$key});
  if (defined($tong_unique_users{$i[0]})){
  $tong_unique_users{$i[0]}=$tong_unique_users{$i[0]}+1;
  }else{
  $tong_unique_users{$i[0]}=1;
  }
  }
  close(USER);
  print "\n桶号   活动人次    活动用户数  总数    活动比率\n";
  foreach $key(sort(keys %tongidall)){
  if (defined($tong_unique_users{$key})){
  print $key."   ".$tong_visit_times{$key}."     ".$tong_unique_users{$key}."        ".$tongidall{$key}."    ".(defined($
  tongidall{$key})?100*$tong_unique_users{$key}/$tongidall{$key}."%":"此行数据有问题")."\n";
  }
  }
  #--------------end of main program----------
  sub readlogfile{
  my($curlogfile) =@_;                          //@_表示缺省的参数
  open(FILE,$curlogfile);                       //打开文件句柄
  while(){
  if ($_=~/UNI-LOG\|/){                   //模式匹配UNI-LOG的行,计数器totaltimes加1
  $totaltimes++;
  chop();                                   //去除换行符号
  @items=split(/\|/);                       //以|进行分割,存入数组items中
  my $web=0;
  my $pop3=0;
  my $smtp=0;
  my $visitmethod=$items[1];                //通过数组下标取数组中的元素内容
  my $username=lc($items[2]);
  my $remote_ip=$items[3];
  my $tongid=$items[4];
  my $visithistory=0;
  if (defined($userlist{$username})){               //defined()如果为undef返回false,即变量为空的话返回假
  $oldvalue=$userlist{$username};
  @olditems=split(/\|/,$oldvalue);
  $visithistory=$olditems[0];
  $web=$olditems[1];
  $pop3=$olditems[2];
  $smtp=$olditems[3];
  }
  if ($visitmethod eq "web"){
  $web=1;
  }
  if ($visitmethod eq "pop3"){
  $pop3=1;
  }
  if ($visitmethod eq "smtp"){
  $smtp=1;
  }
  $visithistory="$web|$pop3|$smtp";
  $userlist{$username}=$tongid."|".$visithistory;
  if (defined($tong_visit_times{$tongid})){
  $tong_visit_times{$tongid}=$tong_visit_times{$tongid}+1;
  }else{
  $tong_visit_times{$tongid}=1;
  }
  }
  }
  }
  sub read_tongs{
  my $server="192.168.41.168";
  my $port=9901;
  use IO::Socket;                  //使用模块
  my $sk = IO::Socket::INET->new(PeerAddr => $server,         //使用方法,具体参考perldoc IO::Socket::INET或者www.cpan.org                                             
  PeerPort => $port,
  Proto    => 'tcp',
  timeout =>30);
  if (!($sk)) {
  print STDERR "fail to connect dbgate:".$server."\n";
  exit;
  }
  print $sk "system.get servers\n";                        //打印到文件句柄$sk
  $echo=;                                         //从$sk中读取输出
  chop($echo);
  if (substr($echo,0,1) eq "0"){
  $echo=substr($echo,2);                       //跳过开头的0
  @items=split/\\s/,$echo;
  foreach $tongid(@items){
  print $sk "server.get ".$tongid." user_count\n";
  $echo=;
  my $tongcount=substr($echo,2);
  $totalusers=$totalusers+$tongcount;
  $tongidall{$tongid}=$tongcount;
  }
  $totaltongs=(keys(%tongidall));
  }
  }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561023-1-1.html 上篇帖子: perl 读书手记 下篇帖子: perl 监控log统计脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表