добавить два поля с буквами, которые закодированы как числа, разделенные двоеточием, в полях 4 и 5

Прежде всего... вам нужно следовать инструкциям OpenVAS на их сайте:

For installation from source code, it is recommended and assumed that you are familiar with the procedure to build and install software starting with the actual source code.

Если вы не знакомы с компиляцией из исходников, то вам нужно сначала изучить ее, прежде чем пытаться скомпилировать OpenVas...

Теперь, когда это было сказано...

Обычный рабочий процесс компиляции состоит в том, чтобы сначала установить библиотеки, затем Сканер, затем Менеджер и, наконец, Помощник по безопасности Greenbone (, поэтому они перечислены именно таким образом)

Из ваших источников:

Библиотеки:

1 )Вам необходимо прочитать файл INSTALL, в котором указано:

Prerequisites for openvas-libraries

...

General build environment:

...

Сканер:

Повторить шаг 1)

Менеджер:

Повторить шаг 1)

Помощник по безопасности Greenbone

Повторить шаг 1)

Все есть в источниках, нужно только их прочитать.

0
22.11.2019, 02:02
3 ответа

Мы можем сделать это следующим образом, используя утилиты Perl и sed:

perl -F'\t' -pale '$"="\t";
   /(?:^|:)(?=[1-9])/g, push(@F, qw[A T C G N del][+pos>>1]) for @F[3,4];
   $_="@F";
' file.tsv

NW_006532398.1 302035   C  0:0:32:0:0:0   42:0:0:0:0:0   KCND2 intergenic_region C  A
NW_006532398.1 302035   C  0:0:0:0:0:2 42:0:0:0:0:0   KCND2 intergenic_region del   A
NW_006532656.1 289636   C  0:0:28:0:0:0   0:28:0:0:0:0   CNTN1 intron_variant C  T
NW_006532762.1 6396  C  0:54:0:0:0:0   0:0:53:0:0:0   NA intergenic_region T  C
NW_006532762.1 25741 C  0:0:62:0:0:0   0:43:0:0:0:0   NA intergenic_region C  T
NW_006532762.1 32304 T  0:60:0:0:0:0   0:0:49:0:0:0   NA intergenic_region T  C
NW_006532762.1 179065   G  0:0:0:45:0:0   59:0:0:0:0:0   DOCK4 intron_variant G  A

sed -re '
   1{x;s/.*/A:T:C:G:N:del/;x;}
   s/\t/&\n/3;G;ba
   :b;s/\t/&\n/4;G
   :a;s/\n0:(.*)\n[^:]+:/0:\n\1\n/;ta
   s/\n//;s/\n([^:]+)/\t\1\n/;s/\n.*//;s/^//;tc
   :c;s/\t/&/8;t;bb
' file.tsv

Пояснения:

  • В четвертом $F[3]и пятом $F[4]полях текущей записи$_(ака, строка )мы

    определить позицию (в этом поле )первой ненулевой цифры. В силу того

    , что 0:занимают 2 позиции, мы делим найденную позицию пополам, чтобы получить индекс анонимного массива qw[A T C G N del]для этого поля.

  • Теперь нужно просто прикрепить найденные A/T/C/G/N или del к массиву @F.

  • Затем мы экстраполируем массив @Fс помощью вкладки$"()и распечатываем его.

Предположения:

  1. Нет начальных табуляторов, которые портят подсчет полей в массиве @F.
  2. Предполагается, что четвертое и пятое поля равны one-hot, что означает, что всегда обязательно присутствует ровно одно ненулевое число.
  3. В четвертом и пятом полях нет ненулевых чисел, начинающихся с 0.
  4. Четвертое и пятое поля не содержат все 00 для нуля.
  5. Четвертое и пятое поля содержат ровно шесть чисел, разделенных одинарными двоеточиями, и не имеют завершающего/начального двоеточия.
1
28.04.2021, 23:27
$ cat tst.awk
BEGIN {
    FS=OFS="\t"
    split("A:T:C:G:N:del",map,/:/)
}
{ print $0, vals2id($4), vals2id($5) }
function vals2id(vals,  arr, i, id) {
    split(vals,arr,/:/)
    for (i in arr) {
        if (arr[i] != 0) {
            id = map[i]
        }
    }
    return id
}

$ awk -f tst.awk file
NW_006532398.1  302035  C       0:0:32:0:0:0    42:0:0:0:0:0    KCND2   intergenic_region       C       A
NW_006532656.1  289636  C       0:0:28:0:0:0    0:28:0:0:0:0    CNTN1   intron_variant  C       T
NW_006532762.1  6396    C       0:54:0:0:0:0    0:0:53:0:0:0    NA      intergenic_region       T       C
NW_006532762.1  25741   C       0:0:62:0:0:0    0:43:0:0:0:0    NA      intergenic_region       C       T
NW_006532762.1  32304   T       0:60:0:0:0:0    0:0:49:0:0:0    NA      intergenic_region       T       C
NW_006532762.1  179065  G       0:0:0:45:0:0    59:0:0:0:0:0    DOCK4   intron_variant  G       A
2
28.04.2021, 23:27

Я считаю, что следующий скрипт sed сделает то, что вам нужно:

s/\t[1-9][0-9]*:0:0:0:0:[^\t]*\t/&A\t/g
s/\t0:[1-9][0-9]*:0:0:0:[^\t]*\t/&T\t/g
s/\t0:0:[1-9][0-9]*:0:0:[^\t]*\t/&C\t/g
s/\t0:0:0:[1-9][0-9]*:0:[^\t]*\t/&G\t/g
s/\t0:0:0:0:[1-9][0-9]*:[^\t]*\t/&N\t/g
s/\t0:0:0:0:0:[1-9][0-9]*\t/&del\t/g
s/^\t(([^\t]*\t){4})([^\t]*)\t([^\t]*)(\t[^\t]*)(\t.*)/\1\4\6\t\3\5/

Выполнить с помощью:

sed -rf script.sed file.tsv > output.tsv
2
28.04.2021, 23:27

Теги

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