Skynet

---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks




环境设置:如果有系统字符编码 冲突,在当前
vim 
~/.bash_profile 下加入
LANG
=zh_CN
LC_ALL
=zh_CN.UTF8
export LANG LC_ALL


字符编码转化
:
  
# 由decode解析,默认会使用 系统编码 输出
  # 在 linux 下面其实等价 encode("UTF-8", decode("GBK",$_));

perl -MEncode -ne 'print decode("GBK",$_);'  file.txt

判断数据是否符合输出:
  echo 
"121" |perl -ne 'print if /2/;'   #print 123

匹配正则group输出
:
  echo 
"abc121a" |perl -ne 'print $1 if /(\D+)/;'   #print abc

大小写转化:
  
# 全部 大小转小写
  echo "ABC1C2cGJ" |perl -ne 'tr/[A-Z]/[a-z]/; print ;'  #print
  # "L 中间全部小写 "E   ; "U 中间全部大写 "E    ↓

  echo "ABC1C2cGJ" |perl -ne 's/(.*?1)(.*?)(2.*?)/$1\L$2\E$3/g; print ;'  #print ABC1c2cGJ



源文件替换:
   echo 
"ABC 123" > te
   sed 
-'s/ABC/abc/g' te
       或者 
: perl --pe 's/ABC/abc/g' te
   cat te 
# print abc 123


外部传参
:
 
tt="cc"
  echo "gg" |perl -ne ' print "'$tt'" ;'
  输出:cc

  perl -e  'print "$ARGV[0]\t$ARGV[1]\n" '  'par1' 'par2'  #print par1 par2
 


重复列输出
:
   cat xx
.txt | awk -F"    " 'a[$1]++'
   或者 
:   
   cat xx
.txt |perl -F"\t" -ane  '$a{$F[1]}++;END{
        while(($k,$v)=each(%a)){ print "$k = $v "n"; }
    }
'
    结果比如:
       百度手机在线 
= 7
       中兴 
= 2
       万信恒通  
= 2
   还比如:查看各用户 有多少个进程
   ps 
-ef |perl  -ane  '$a{$F[0]}++;END{
      while(($k,$v)=each(%a)){ print "$k = $v \n"; }
   }
'

求 两项  交集
cat BuyMusic
.20090525| perl -ne 'BEGIN{
 $p1="600902000005416300";
 $p2="600902000006211983";
 $p_col=30;
 $mob_col=0;

}END{
  my @inter = grep {$a{$_}} keys %b; # 求交集
  #print $p1,"=",join(",",keys %a),""n";
  #print $p2,"=",join(",",keys %b),""n";
  print "产品 $p1:",scalar keys %a," "n";
  print "产品 $p2:",scalar keys %b," "n";
  print "交集:",scalar @inter," "n";
}
chomp;
@lis=split /\|<>\|/ ;
if( $lis[ $p_col] eq $p1 ){
   $a{$lis[$mob_col]}++;
}
if( $lis[$p_col] eq $p2 ){
   $b{$lis[$mob_col]}++;
}
'

 

关键字 Top 
10 ,输出源文本数据 :
perl 
-e  '
  my $num=10; # top 10
  open(MYFILE, "<$ARGV[0]");
  open(MYFILE2, "<$ARGV[0]");

  # 关键字列数
  while(<MYFILE>){@lis=split /\|<>\|/;$fck{$lis[1]}++ }

  foreach $k (sort { $fck{$b} <=> $fck{$a} } keys %fck){
     if(++$row>$num){last; }
     $arr[@arr] = $k;
  }
 
  while(<MYFILE2>){@lis=split /\|<>\|/;
     if(grep { $arr[$_] eq $lis[1] } 0..$#arr){
       # print "$fck{$lis[1]}:$_"; #带 关键字出现次数输出
       print ;
     }
  }
' qdSearch.log






整理 www.blogjava.net/Good-Game
posted on 2009-11-11 13:36 刘凯毅 阅读(1941) 评论(0)  编辑  收藏 所属分类: perl

只有注册用户登录后才能发表评论。


网站导航: