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

Попробуйте запустить umaskв своей папке. Если он возвращает что-либо, кроме «0022», это ваша проблема. В вашем случае он должен изначально выводить «0177». Система разрешений при создании каталога в основном вычисляется :default - umask0777 - режим по умолчанию для каталогов, а 0666 - для обычных файлов, но есть разные umask, если я правильно понимаю эти вещи. Попробуйте выполнить umask a=rx,uu+w.

РЕДАКТИРОВАТЬ :Вы можете использовать umask, чтобы указать бит выполнения для каталога, чтобы иметь возможность перейти в него, но не в файлы. Им необходимо вручную задать бит выполнения из соображений безопасности. Просто добавьте chmod +x <file>в свой скрипт. И флаг выполнения, установленный для файла, кроме исполняемого файла, не имеет никакого эффекта.

-2
06.09.2019, 13:18
2 ответа

В следующем сценарии предполагается, что вы хотите напечатать имена столбцов для всех столбцов в каждой строке ввода (после первой строки заголовка ), которые имеют значение 1.

#!/usr/bin/perl

use strict;

my @titles=();

while(<>) {
  if ($. == 1) {
     @titles = split;         # get column titles
     print "#OTUID\tASVs\n";  # print the new output header
     next;
  };
  chomp;

  my @F=split;       # split the input line into fields, store in array @F

  my @ASVs=();       # @ASV array holds the titles for each matching field.

  foreach my $asv (1..$#F) {
    push @ASVs, $titles[$asv] if ($F[$asv] == 1);
  };

  print "$F[0]\t", join(",", @ASVs), "\n";
}

сохраните его как, например, alex.pl, сделайте его исполняемым с помощью chmod +x alex.plи запустите так:

$./alex.pl input.txt 
#OTUID  ASVs
OTU1    ASV_1,ASV_4,ASV_10
OTU2    ASV_2,ASV_5
OTU3    ASV_6,ASV_8,ASV_9
2
28.01.2020, 05:15
$ perl -lane '$,="\t";
   $. == 1 and do{ $h{$_} = $F[$_] for 1..$#F; print $F[0], "ASVs"; next; };
   print $F[0], join ", ", map { $h{$_} } grep { $F[$_] == 1 } 1..$#F;
' file

Результаты:

#OTUID  ASVs
OTU1    ASV_1, ASV_4, ASV_10
OTU2    ASV_2, ASV_5
OTU3    ASV_6, ASV_8, ASV_9
1
28.01.2020, 05:15

Теги

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