Skynet

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

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


          對應腳本運用:
            1.  shell  統籌管理 腳本的運行。合理結合 crontab ,  ps -ef ,kill 等命令。
             2.  perl  處理短小快 。
             3.  python 有比較復雜結構和邏輯的。
           
          本文主要介紹 perl 的行級命令使用 ,力求 短 小 快
          #最簡單的
          $ perl -'print "Hello World\n"'

          #處理文件 行
          $ perl --'print $_' file1


          #編碼轉換
          #如果 有需要 在使用下  encode("UTF-8", decode("GBK",$_));在 linux 下默認 utf-8

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




          #正則使用
             #  if($_=~/.*\/(.*)$/){  print $1 ;}  這是perl 巨方便的地方 $1 xx  
          # next LINE 跳到下一個循環

          $ perl --'next LINE unless /pattern/; print $_'


          #去除換行 chomp
          perl -'print split(/\n/,"asg\n");'


          #像 awk 一樣 Begin End
          $ perl -ne 'END { print $t } @w = /(\w+)/g; $t += @w' file.txt 

          #像 awk -F"x" 一樣 切割行
          #-a 打開自動分離 (split)  模式
          #@F 為 切割后的 數組

          perl -F'\t' -ane '
           if($F[1]=~/侃侃/ and $F[2]=~/愛情啊/){
                print "$F[3]\t$F[4]\t$F[5]\n"
            }
          ' all2_data.sort.st

          實際處理:
           
          perl -F'\|\|' -ane '
           my $actor,$music ;
           if  ( $F[3] ){
            $music=$F[2];
            $actor=$F[3];
           }else{
            $music=$F[0];
            $actor=$F[1]; 
           }
            $music =~ tr/[A-Z]/[a-z]/;
            $music =~ s/\s*(.*)\s*\(.*\)/\1/g;
            $actor =~ tr/[A-Z]/[a-z]/;
            $actor =~ s/\s*(.*)\s*\(.*\)/\1/g;
          print "$actor-$music\n";
          ' ring.utf8.txt  |sort -u  > ring.actor_music.sort.utf8.txt &
          wc 
          -l ring.actor_music.sort.utf8.txt


          #像 sed 一樣替換
              # -i 和 sed 一樣 perl 輸出會替換調 源 file.txt
          $ perl --pe 's/\bPHP\b/Perl/g' file.txt


          #外部 傳參
          perl -ne'print "$ARGV[0]\t$ARGV[1]\n" ' file.txt 'par1' 'par2'
              #結果 ..  par1     par2 ..



          # 查詢出 重復列 次數,并 列舉出來
          cut -d"     "  -2 .collection_mobile.data |perl -ne '
             END{
               while (($key,$value)=each(%a)){print $key,"=",$value,"\n";};
             }BEGIN{ %a =(); } 
             chomp;
             $a{$_}+=1; 
           
          '
          結果
          Ring=532895
          CRBT=68500
          RingBoxes=880
          Song=96765

           
          #一些實際使用 :)
          find . -name "*.mp3" | perl -pe 's/.\/\w+-(\w+)-.*/$1/' | sort | uniq
             perl -F'\t' -ane 'if($F[1]=~/$ARGV[0]/ and $F[2]=~/$ARGV[1]/){print "$F[3]\t$F[4]\t$F[5]\n"}' all2_data.sort.st '侃侃' '愛情啊'

          #與 find 合用 -e $ARGV[0] 批量 把 excel 倒成 文本 格式
          find . -maxdepth 1 -name "*xls" -exec perl -'
          require("/home/xj_liukaiyi/src/perl/excel/excelUtil.pl");
          my $file=$ARGV[0];
          sub myRead{
            
          my $str = "";
            
          for $tmp(@_){
              
          $str="$str$tmp\t";
            }
            
          $str="$str\n";
            
          system "echo \"$str\" >> $file.data ";
          }
          &parse_excel("$file",0,\&myRead);
          print "$file\n";
          ' {} \;




          參考:
          http://www.ibm.com/developerworks/cn/linux/sdk/perl/l-p101/index.html
          http://bbs.chinaunix.net/viewthread.php?tid=499434





          整理 www.aygfsteel.com/Good-Game
          posted on 2009-04-01 14:12 劉凱毅 閱讀(1947) 評論(2)  編輯  收藏 所屬分類: perl

          Feedback

          # re: perl 的幸福生活 2009-04-15 11:49 劉凱毅
          所謂的多線程哦
          sed -n '1,1000p' 什么的 就可以了
          :)
          ls mp3/ |sed -n '4000,6000p'|perl -ne '
          require "/home/xj_liukaiyi/src/perl/util/perlUtil.pl";
          my $tmp=$_;
          chomp($tmp);
          my $to="yd_MP3_stereo_48kbps";
          &set_log_input_file("log_mp3_48");
          unless ( (-e "$to/$tmp") && ($tmp=~/.*\..*/) ){
          &system_util("lame -S --resample 44.1 --abr 16 -m s -b 48 \"./mp3/$tmp\" \"./$to/$tmp\" ");
          }
          ' &

            回復  更多評論
            

          # re: perl 使用 2009-09-01 23:46 skynet
          交集
          cat ddata | perl -ne 'BEGIN{
          $p1="p1";
          $p2="p2";

          $ssplit="\t";


          }END{
          my @inter = grep {$a{$_}} keys %b; # 求交集
          print $p1,"=",join(",",keys %a),"\n";
          print $p2,"=",join(",",keys %b),"\n";
          print "交集:",scalar @inter," \n";
          }
          chomp;
          @lis=split /$ssplit/;
          if( $lis[1] eq $p1 ){
          $a{$lis[0]}++;
          }
          if( $lis[1] eq $p2 ){
          $b{$lis[0]}++;
          }

          '
            回復  更多評論
            

          主站蜘蛛池模板: 民县| 嵩明县| 皮山县| 德安县| 武胜县| 天全县| 金沙县| 迭部县| 白玉县| 托克逊县| 格尔木市| 长顺县| 临朐县| 博湖县| 桐梓县| 旌德县| 德清县| 达孜县| 界首市| 贞丰县| 山阴县| 松滋市| 当雄县| 靖州| 阳谷县| 仁化县| 达尔| 集贤县| 永泰县| 郸城县| 吴川市| 眉山市| 上林县| 南投市| 阿勒泰市| 石屏县| 双牌县| 长垣县| 天台县| 四平市| 徐水县|