Получать среднее значение для всех строк каждые 3 столбца

С помощью gnome-tweak-tool вы можете установить topicons плюс расширение .

Он делает именно это; перемещает значки на верхнюю панель с несколькими вариантами, позволяющими получить их в соответствии с вашими настройками.

Вот прямая ссылка для вашего удобства: https://extensions.gnome.org/extension/1031/topicons/

1
09.02.2017, 16:53
2 ответа

A1 Perl: использование tradicional для всех строк

Предполагаемый формат ввода : sampleId, группы из 3 значений

perl -nE '($out,@g)=split;                   #sampleId a1 b1 c1  a2 b2 c2 ...
          while(($a,$b,$c,@g)=@g){           
             $out .= " ".($a+$b+$c)/3 }
          say $out '

или

A2 Perl: использование только регулярных выражений, substitute и eval

perl -pe 's!\b(\d+)\s+(\d+)\s+(\d+)! ($1+$2+$3)/3 !ge'
0
27.01.2020, 23:46

Я бы взялся за это примерно так:

#!/usr/bin/perl

use warnings;
use strict;

my $field_count = 3;

#discard first row, as the fields don't match
my $first_row = <>;
#iterate STDIN or files specified on command line, just like grep or sed do. 
while ( <> ) {
   #extract the name and values. Maybe you need a 'chomp' to remove linefeeds 
   #it works given your sample data, because the last field is a number. 
   my ( $samplename, @fields ) = split; 
   my @new_fields; 
   while ( @fields ) {
      #extract fields 3 at a time.  
      my @group = splice @fields, 0, $field_count;
      #sum them
      my $sum = 0;
      $sum += $_ for @group;

      my $avg = $sum / @group; #divide by number of elements in this group, so it'll work if there's 1 or 2 'trailing'. 
      #stash that in the new field list. 
      push @new_fields, $avg;
   }
   #print the output line. 
   print join "\t", $samplename, @new_fields,"\n"
}
1
27.01.2020, 23:46

Теги

Похожие вопросы