#Perl# 给文本中的数字添加千分符
2017-06-08 本文已影响58人
生信杂谈
日常做完生信分析后,我们会对某些数据进行统计并做成一份统计结果,而统计结果出现数字是再正常不过的。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);
这个程序思路不难,关键是要灵活运用模式匹配和函数,即首先要知道自己要干嘛,然后边写边想吧。
更多原创精彩内容敬请关注生信杂谈: