copie os nomes das seqüências de DNA em um arquivo de árvore filogenética e adicione os nomes das espécies a ele

0

De um arquivo parecido com este:

(AJirio_TR15329|c4_g1_i4|m.30470:0.00230,(AJama_TR16613|c5_g2_i2|m.30203:0.00171,(AJkago_TR11651|c5_g2_i1|m.3847:0.00057,AJtok_TR11413|c7_g1_i1|m.3527:0.00033)1.00    :0.00080)0.94    :0.00085,Atab_TR15364|c0_g1_i1|m.4073:0.27697);

Eu preciso obter este arquivo:

AJirio_TR15329|c4_g1_i4|m.30470"AJirio"  
AJama_TR16613|c5_g2_i2|m.30203"AJama"
AJkago_TR11651|c5_g2_i1|m.3847"AJkago"
AJtok_TR11413|c7_g1_i1|m.3527"AJtok"
Atab_TR15364|c0_g1_i1|m.4073"Atab"

Então basicamente extraia o nome das seqüências de DNA em uma árvore filogenética e adicione o nome da espécie (AJirio, AJkama ..) com aspas.

    
por DavidB 09.01.2018 / 16:18

2 respostas

2

Awk solução:

awk -v RS=',' -F':' '{ 
           sub(/^\(/, "", $1); 
           printf "%s2%s2\n", $1, substr($1, 1, index($1,"_")-1) 
       }' file
  • RS=',' - tratando , como separador de registro
  • -F':' - tratando : como separador de campo
  • sub(/^\(/, "", $1) - remove a chave principal do primeiro campo $1
  • 2 - octal código ASCII do caracter de aspas duplas "
  • substr($1, 1, index($1,"_")-1) - extraindo o nome da espécie do primeiro campo (da posição inicial 1 até a primeira ocorrência de _ char)

A saída:

AJirio_TR15329|c4_g1_i4|m.30470"AJirio"
AJama_TR16613|c5_g2_i2|m.30203"AJama"
AJkago_TR11651|c5_g2_i1|m.3847"AJkago"
AJtok_TR11413|c7_g1_i1|m.3527"AJtok"
Atab_TR15364|c0_g1_i1|m.4073"Atab"
    
por 09.01.2018 / 16:56
0

Isso parece te dar o que você quer:

O arquivo de entrada:

$ cat input
(AJirio_TR15329|c4_g1_i4|m.30470:0.00230,(AJama_TR16613|c5_g2_i2|m.30203:0.00171,(AJkago_TR11651|c5_g2_i1|m.3847:0.00057,AJtok_TR11413|c7_g1_i1|m.3527:0.00033)1.00    :0.00080)0.94    :0.00085,Atab_TR15364|c0_g1_i1|m.4073:0.27697);

O script para traduzir a entrada para saída. O script usa tr para converter vírgulas em quebras de linha e, em seguida, usa sed para eliminar todos os espaços, todos os parênteses e remover tudo depois de : em uma linha e usa awk para imprimir a linha com seguido por uma citação, seguido pelo texto antes do primeiro caractere | e, finalmente, usa sed para cortar tudo após o último _ e para adicionar as aspas duplas finais.

$ cat script.sh
#!/bin/bash

input="${1}"
output="${2}"

cat "${input}" | tr ',' '\n' |
    sed -e 's/ //g' -e 's/[()]//g' -e 's/:.*$//' |
    awk -F'|' '{ print $0"\""$1 }' |
    sed -e 's/_[^_][^_]*$/"/' > "${output}"

Execute o script:

$ bash script.sh input output

Observe a saída:

$ cat output
AJirio_TR15329|c4_g1_i4|m.30470"AJirio"
AJama_TR16613|c5_g2_i2|m.30203"AJama"
AJkago_TR11651|c5_g2_i1|m.3847"AJkago"
AJtok_TR11413|c7_g1_i1|m.3527"AJtok"
Atab_TR15364|c0_g1_i1|m.4073"Atab"
    
por 09.01.2018 / 16:36