我一直在研究一个项目,我必须说明下一个目标
“如果值大于
10^-8
,则在列[27]中删除文件”
如何在程序中编写10^-8
?
#!/usr/local/bin/perl
use strict;
use warnings;
my @traitarray;
my $traitarray;
my $input ;
my %traithash ;
my $t_out ;
my $TRAIT;
my $SNPS;
open ($input, "gwas_catalog_v1.0-downloaded_2015-07-31.tsv") || die () ;
while(<$input>) {
@traitarray = split (/\t/);
$TRAIT = $traitarray[7];
$SNPS = $traitarray[21];
if (!exists $traithash {$TRAIT}) {
$TRAIT =~ tr/ /_/ ;
$TRAIT =~ tr/:/-/ ;
$TRAIT =~ tr/\//-/ ;
$TRAIT =~ tr/*/-/ ;
open ($t_out, ">outputFiles/".$TRAIT.".txt");
print $t_out "$SNPS\n";
$traithash {$TRAIT} = 1 ;
push (@traitarray, $TRAIT) ;
}
else {
print $t_out "$SNPS\n";
}
}
foreach ($traitarray) {
close "$TRAIT.txt";
}
专栏[27]有大约30,000行,格式为“6E-12”“”12E-9“等...
答案 0 :(得分:5)
答案 1 :(得分:2)
Anachor already correctly pointed Perl理解指数表示法。但还有更多。
幸运的是,您的数据看起来与指数表示法完全相同。因为Perl不区分数字和字符串,所以可以对该值使用数值运算符。所以你可以直截了当地说:
my $small_number = "6E-12";
if ($small_number > 8e-10) {
say "Over threshhold, I should delete this...";
}
当然,如果您的第27列中有其他内容而不是数字,那么会发出警告(因为您有use warnings
,对吧?)。