#Perl# 给文本中的数字添加千分符

日常做完生信分析后,我们会对某些数据进行统计并做成一份统计结果,而统计结果出现数字是再正常不过的。100,1000,100000这样的还好,但是对于如基因表达count等数据,几百万上千万都不为过。因此,为了方便阅读,在合适的地方添加千分符是很有必要的。如一万是这样的:10,000,100万是这样的:1,000,000。

今天安利一段对文档中的数字添加千分符的perl程序:

use strict;
use warnings;
my $input =shift;
my $output=shift;

open IN,$input;
open OUT,">$output";
while(my $line=<IN>){

     if($line=~s/(\d+.{0,1}\d+)/&separate($1)/eg);  #匹配数字,每匹配到一次,进行添加千分符操作

      print OUT $line;

}

sub separate{
       my $number=$1;
       if(substr($number,0,1)==0){return $number;}  #首位数字wei0,直接返回原数字
       if($number=~m/./){
                 return $number;   #如数字带有小数点,直接返回原数字
       }
      if(length($number)>3){    #数字长度大于3,添加千分符
              my $l=length($number);
              my $i=int $l/3;    #对3取余数
              my $j=$l%3;       #对3取模
              my $newnum="";   #添加千分符后的变量
              my $h=substr($number,0,$j);
              for(;$i>0;$i--){      #循环添加千分符
                    if($j!=0){$newnum=$newnum.$h.",";}  #如模不为0,则在第$j位置添加千分符
                    $h=substr($number,$j,3);
                     $j+=3;
             }
             $newnum=$newnum.$h;
             return $newnum;
      }
       else{return $number;}  #数字长度小于3,则返回原数字
    }
  close(IN);
  close(OUT);

这个程序思路不难,关键是要灵活运用模式匹配和函数,即首先要知道自己要干嘛,然后边写边想吧。

更多原创精彩内容敬请关注生信杂谈

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • 操作符优先级 S03-operators/arith.t lines 46–342 S03-operators/p...
    焉知非鱼阅读 4,793评论 0 0
  • 范围和范围迭代器语法 .. 范围操作符有各种在两端带有 ^符号的变体以表明把那个端点排除在范围之外。 它总会产生一...
    焉知非鱼阅读 4,402评论 0 0
  • 最近在看 Greg London 的Impatient Perl,再次感受 Perl 的奇怪(不过之前用过 Rub...
    Pope怯懦懦地阅读 4,572评论 1 5
  • 我爱你,不是当你枝繁叶茂,当你是高山仰止当你美如画卷时, 锦上添花,毕竟是tm特容易的一件事 我爱你,我也摸不清楚...
    就是丑人阅读 2,405评论 6 2