Организация трехмерных данных с помощью awk / sed / perl

Вам необходимо перевести Chromebook в режим разработчика , чтобы команда оболочки заработала. Это предварительное условие для установки crouton , которое задокументировано в первой строке предварительного раздела руководства, которому вы следуете.

Как вы это сделаете, будет зависеть от вашего конкретного устройства; есть много гидов.

3
25.05.2016, 22:21
2 ответа

На perl:

#!/usr/bin/perl

my (%hotu, %hpc)=();
while(<>){
  my($pc,$otu,$v)=split;
  $hpc{$pc}=1;
  ($hotu{$otu} or $hotu{$otu}={})->{$pc}+=$v;
}
#headers
my @apc = sort keys %hpc;
print join ("\t", 'OTU_ID', @apc) . "\n";
#values
foreach my $otu (sort keys %hotu) {
  print join ("\t", $otu, map {$_=0 unless defined; $_} @{$hotu{$otu}}{@apc}) . "\n";
}
4
27.01.2020, 21:12

В awk :

{ data[$2, $1] = $3; }
END {
    split("OTU0 OTU1 OTU2 OTU3", rows);
    split("OTU_ID PC.354 PC.355 PC.356", cols);
    for (i = 1; i <= 4; i++) {
        printf("%10s", cols[i]);
    }
    print "";
    for (i = 1; i <= 4; i++) {
        printf("%-10s", rows[i]);
        for (j = 2; j <= 4; j++) {
            item = data[rows[i], cols[j]];
            if (!item) { item = "0" };
            printf("%10s", item);
        }
        print "";
    }
}

Обратите внимание, что я явно включил все строки и столбцы из вашего примера вывода. В этом нет необходимости, если данные фактически включают все строки и столбцы, чего нет в ваших выборочных данных.

3
27.01.2020, 21:12

Теги

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