Python 如何反转负链上的外显子数?

Python 如何反转负链上的外显子数?,python,awk,Python,Awk,如下图所示,当基因位于负链(第6列中的“-”)上时,外显子数(第5列)应该是相反的。例如,对于NT5C3B基因,编号为1,2…9的外显子应该反转为9,8…1,我不知道如何用awk或Python编程实现这一点。我将非常感谢你的帮助 杰夫试试这个,我想它应该能满足你的需求。不过,格式不会完全相同 from itertools import groupby

如下图所示,当基因位于负链(第6列中的“-”)上时,外显子数(第5列)应该是相反的。例如,对于NT5C3B基因,编号为1,2…9的外显子应该反转为9,8…1,我不知道如何用awk或Python编程实现这一点。我将非常感谢你的帮助




杰夫

试试这个,我想它应该能满足你的需求。不过,格式不会完全相同

from itertools import groupby                                                                       
res = []                                                                                            
with open('filenamegoeshere.whatever') as f:                                                                         
    for line in f:                                                                                  
        res.append(line.strip().split())                                                            
res2 = [list(g) for k, g in groupby(res, lambda x: (x[3], x[5]))]                                           
res3 = [l if l[0][5] == '+' else list(reversed(l)) for l in res2]                                   
res4 = [item for sublist in res3 for item in sublist]                                               
for row in res4:                                                                                    
    print(" ".join(row)) 

awk
救援

假定已排序的输入为提供的文件

awk '$4!=p{for(;i>0;i--) print a[i]; i=0; p=$4} 
   $6=="-"{a[++i]=$0; next} 1; 
       END{for(;i>0;i--) print a[i]}' file
只需更改订单号,就可以更容易地编写两遍算法,例如

$ awk -v OFS='\t' 'NR==FNR{a[$4]=$5; next}
                   $6=="-"{$5=a[$4]-$5+1}1' file{,} | 
  column -t 

输入格式丢失,这就是为什么需要设置s和
列-t
以进行漂亮打印。

我投票决定结束这个问题,因为它太宽了。您需要自己尝试解决问题。欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布代码并准确描述问题之前,我们无法有效地帮助您。StackOverflow不是编码或教程服务。而且。。。我们是否真的需要30行数据来说明问题,而不是复杂的口头描述,请更新您的Q以显示编辑输入列表的预期输出。所有序列都需要反转,还是只需要最后一个字段上有
-
的序列?祝你好运。
perl-ple“s/\b([0-9])(\s+-)$/10-$1.$2/e”in.txt
;-)您好,用户3030010,非常感谢您的帮助。您的代码可以工作,但它也反转了同一行上的其他字段。我所期望的是,只有第5列的数字是颠倒的。这是我的错,没有清楚地定义我的问题。嗨,卡拉卡法,谢谢你的帮助。你的代码可以工作,但不是我想要的。我只想颠倒第5列的数字顺序,而不影响同一行上的其他字段。抱歉给你带来困惑。嗨,卡拉卡法,非常感谢你!这太棒了!
$ awk -v OFS='\t' 'NR==FNR{a[$4]=$5; next}
                   $6=="-"{$5=a[$4]-$5+1}1' file{,} | 
  column -t