Extrai o valor do texto formatado com o bash

0

Eu tenho um arquivo .fasta, que é estritamente um texto formatado contendo algumas informações sobre o DNA. Aqui está sua estrutura comum:

>NODE_18_length_75451_cov_83.3021
TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3_length_175235_cov_84.0427
ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG

Em linhas pares você tem a sequência de DNA, e em linhas estranhas você tem informações sobre a sequência. Este esquema é repetido por pelo menos 10k linhas, em um único arquivo de texto. Eu preciso encontrar uma maneira de obter apenas o valor depois de "cov_" para cada linha, multiplicá-la por 2 e imprimir em um novo arquivo. O novo arquivo precisa ter esse esquema (para todas as linhas):

>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.04
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG  
    
por Shred 13.02.2018 / 10:28

2 respostas

0

Se você realmente quiser usar o shell para isso, pode passar a aritmética para outro comando, como bc :

while read odd ; do
    echo -n "cov_" ; echo "2*${odd##*_}" | bc -q
    read even
    echo "DNA seq: $even"
done < input.fasta
    
por 13.02.2018 / 13:55
0

Com bash? não vá lá, não é uma linguagem de processamento de texto. Com o awk:

awk -F_ '/^>/ {printf "%s_%s cov_%.2f\n", $1, $2, $6 * 2; next} {print "DNA seq:", $0}' file.fasta 
>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.09
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG
    
por 13.02.2018 / 13:34