eu quero criar um 8º e 9º campo/coluna com a letra apropriada codificada como números nas colunas 4 e 5. Os seis números separados por dois pontos correspondem aA:T:C:G:N:del
Nota: algumas linhas na coluna 6 e 7 estão vazias que consertei inserindo NA com isso:
awk -F'[[:space:]]' '$5 && !$6{ $6="NA" }1'
awk -F'[[:space:]]' '$6 && !$7{ $7="NA" }1'
Em seguida, fez o arquivo delimitado por tabulação novamente comsed -e 's/ /\t/g'
Arquivo.tsv
NW_006532398.1 302035 C 0:0:32:0:0:0 42:0:0:0:0:0 KCND2 intergenic_region
NW_006532656.1 289636 C 0:0:28:0:0:0 0:28:0:0:0:0 CNTN1 intron_variant
NW_006532762.1 6396 C 0:54:0:0:0:0 0:0:53:0:0:0 NA intergenic_region
NW_006532762.1 25741 C 0:0:62:0:0:0 0:43:0:0:0:0 NA intergenic_region
NW_006532762.1 32304 T 0:60:0:0:0:0 0:0:49:0:0:0 NA intergenic_region
NW_006532762.1 179065 G 0:0:0:45:0:0 59:0:0:0:0:0 DOCK4 intron_variant
Exemplo de output.tsv
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
Qualquer ajuda é muito apreciada!!
Acredito que o seguinte script sed fará as coisas que você deseja:
Correr com:
Podemos fazer isso da seguinte maneira usando os utilitários Perl e sed:
Explicações:
No quarto
$F[3]
e quinto$F[4]
campos do registro atual$_
(também conhecido como linha)determine a posição (dentro desse campo) do primeiro dígito diferente de zero. Em virtude do fato
que ocupam 2 locais, reduzimos pela metade a posição encontrada para obter o índice de
0:
matriz anônimo para esse campo.qw[A T C G N del]
Agora é apenas uma questão de adicionar o A/T/C/G/N ou del encontrado ao array
@F
.Em seguida, extrapolamos a matriz
@F
usando a$"
(tab) e a imprimimos.Suposições:
@F
matriz.one-hot
, o que significa, sempre, que exatamente um número diferente de zero estará lá.