Text-Processing
使用 bash 從格式化文本中提取值
我有一個 .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
如果您真的想為此使用 shell,您可以將算術交給另一個命令,例如
bc
:while read odd ; do echo -n "cov_" ; echo "2*${odd##*_}" | bc -q read even echo "DNA seq: $even" done < input.fasta
用 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