在非标签行上重复先前的标签和增量计数

我有以下包含基因名称和外显子位置的字符串。

gene1
250405..250551
251490..251884
195620..195641
154254..155469
156319..156548
gene2
171224..171481
403914..403970
147436..147627
149077..149157
11635..12021
gene3
107657..107844
105642..106214
103531..103691
407044..407435
405691..405843

我想编写一个脚本,该脚本将列出所有基因名称以及输出应显示的位置

gene1_exon1 250405..250551
gene1_exon2 251490..251884
geneN_exonN X..Y 

有什么想法可以做到吗?

我尝试了以下脚本

grep [a-z] temp3 > names
cat names |
while read line; do
  cat temp3 |
  while read position; do
    if [ "$line" != "$position" ] ; then
      echo "$line" ${position} >> names_and_positions
    else
      break
    fi
  done
done
c68654626 回答:在非标签行上重复先前的标签和增量计数

取出基因名称,并在每个外显子行之前重复它。

awk '!/^[0-9]+\.\.[0-9]+$/ { gene=$1; i=1; next }
    { print gene "_exon" i++,$0 }' input >output

在看起来不像外显子系的行上,捕获第一个标记作为基因名称,并从1开始计数外显子系。在其他行(即外显子系)上打印带有捕获的字符串和外显子行的行数字开头,然后增加数字。

这显然取决于正确的正则表达式。如果您的外显子信息周围可能包含空格或其他变体,则需要相应地调整正则表达式。

本文链接:https://www.f2er.com/3076815.html

大家都在问