2015-08-04 4 views
1

Я работаю над программой на некоторое время, и следующая цель, которую я должен сказать, что в основномКак написать научную нотацию в perl?

«В колонке [27], если значение больше, чем 10^-8 удалить файл»

Как написать 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" " "12Е-9" ЭСТ ...

+0

Что такое колонка 27? Пример: 'perl -E 'say 1e-8 * 1e8'' –

+2

Для получения дополнительной информации см. [' Perlnumber'] (http://perldoc.perl.org/perlnumber.html). –

+0

Вы должны написать код – fugu

ответ

5

Просто используйте 1e-8

e является общим нотация для показателей

. Пример: 5.5e100 есть (5,5 * 10^100)

Дополнительная информация: Wikipedia, perlnumber (спасибо Håkon Hægland)

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, верно?).

Смежные вопросы