我有一个 .fasta 文件,它是严格格式化的文本,包含一些有关 DNA 的信息。这是它的常见结构:
>NODE_18_length_75451_cov_83.3021
TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3_length_175235_cov_84.0427
ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG
在偶数行上你有 DNA 序列,在奇数行上你有关于该序列的信息。该方案在单个文本文件中重复至少 10k 行。我需要找到一种方法来仅获取每行“cov_”之后的值,将其乘以 2 并打印到新文件中。新文件需要具有此方案(对于所有行):
>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.04
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG
答案1
如果您确实想使用 shell 来执行此操作,您可以将算术交给另一个命令,例如bc
:
while read odd ; do
echo -n "cov_" ; echo "2*${odd##*_}" | bc -q
read even
echo "DNA seq: $even"
done < input.fasta
答案2
用bash?不要去那里,它不是文本处理语言。使用 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