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
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
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