日常做完生信分析后钞诡,我們會對某些數(shù)據(jù)進行統(tǒng)計并做成一份統(tǒng)計結(jié)果,而統(tǒng)計結(jié)果出現(xiàn)數(shù)字是再正常不過的湃崩。100,1000,100000這樣的還好荧降,但是對于如基因表達count等數(shù)據(jù),幾百萬上千萬都不為過竹习。因此誊抛,為了方便閱讀,在合適的地方添加千分符是很有必要的整陌。如一萬是這樣的:10,000拗窃,100萬是這樣的:1,000,000瞎领。
今天安利一段對文檔中的數(shù)字添加千分符的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); #匹配數(shù)字,每匹配到一次随夸,進行添加千分符操作
print OUT $line;
}
sub separate{
my $number=$1;
if(substr($number,0,1)==0){return $number;} #首位數(shù)字wei0九默,直接返回原數(shù)字
if($number=~m/./){
return $number; #如數(shù)字帶有小數(shù)點,直接返回原數(shù)字
}
if(length($number)>3){ #數(shù)字長度大于3宾毒,添加千分符
my $l=length($number);
my $i=int $l/3; #對3取余數(shù)
my $j=$l%3; #對3取模
my $newnum=""; #添加千分符后的變量
my $h=substr($number,0,$j);
for(;$i>0;$i--){ #循環(huán)添加千分符
if($j!=0){$newnum=$newnum.$h.",";} #如模不為0驼修,則在第$j位置添加千分符
$h=substr($number,$j,3);
$j+=3;
}
$newnum=$newnum.$h;
return $newnum;
}
else{return $number;} #數(shù)字長度小于3,則返回原數(shù)字
}
close(IN);
close(OUT);
這個程序思路不難诈铛,關(guān)鍵是要靈活運用模式匹配和函數(shù)乙各,即首先要知道自己要干嘛,然后邊寫邊想吧幢竹。
更多原創(chuàng)精彩內(nèi)容敬請關(guān)注生信雜談: