Awk 在fasta文件中标记重复的标题

Awk 在fasta文件中标记重复的标题,awk,sed,duplicates,fasta,Awk,Sed,Duplicates,Fasta,我有一个大的Fasta文件,我想修改它。它基本上由许多以“>”开头的序列组成。我的问题是,有些头不是唯一的,即使序列是唯一的 例如: >acrdi | AD19082 STSTAFPLLTQFYGCAIIILVLAMCSCLVYAMYMMNSGLQTHESTVTQKVKDFSLQ WLQPILFGCWRHRLIAKSRNRSKIPMTGTEPPWNESKDAFENLKTWALNKQNRNCLL EINFLeakDfiVMCKDvCfeeddKderNLCLKTLTEAFFLRNCCAETPKNQ

我有一个大的Fasta文件,我想修改它。它基本上由许多以“>”开头的序列组成。我的问题是,有些头不是唯一的,即使序列是唯一的

例如:

>acrdi | AD19082 STSTAFPLLTQFYGCAIIILVLAMCSCLVYAMYMMNSGLQTHESTVTQKVKDFSLQ WLQPILFGCWRHRLIAKSRNRSKIPMTGTEPPWNESKDAFENLKTWALNKQNRNCLL EINFLeakDfiVMCKDvCfeeddKderNLCLKTLTEAFFLRNCCAETPKNQSFvis SGVAKQAIEVILLLRPVFQEREKGTEVITIRSGLQLLGNTVVVVVKnitdQEFFIWNCCP QFLDVLLSRHHSIQDCMCIIFNCLNQQRRLQLVNNPKIisQIVHLCADKSLLEWGYFI LDCLICEGFPDLYQGMEFDPLALILLDLFQVKITTALDESERTTETPKELYASSL NYLAEQFETYFIDIIQRLQLDYSNSNDFQVLVVTRRLLSLSTGLKSSMTGLQDRASL LETCVDLLRETSKPEAKAAFKRPGTSYWEYVLPTFP

>acrdi | AD19082 MLRQSEPPWNESKDAFELKTWALNKQNRNCLLEINFLECKDFIVCKDVCFEDKDE RNLNLCLKTLEAFRFRNCCAETPKNQSFVISSGVAKQAEIVILLLRPVFQEEKGTE VITDTIRSGLQLLLGNTVVVKnitdQEFLFLLSRHHSIQDCLCMIIFNCLN QQRRLQLVNpkiSqVHLCADKSLLEWGYFILDCLIPGLFPDLYQGMEFDPLALIL LDLFQVKITDALDESERTTETPKELYASSLNYLAEQFETYFIDIIQRLQLQLDYSND FFQVLVVTRLLSTSTGLQDRASLLETCVDLRETSKPEAKAAFSNSSFP HSVDSgrispShgFqrDlvrVignmCqHfPnPnQeKvredgipllLDHCNIDDHnPyIcq Waifairnvlennkenqdivasihplgladmsrlqfgvgdavefdgeki

现在,我想在我的大Fasta文件中找到所有副本,并在副本中添加数字,以便知道它是哪一个副本(1,2,3,…,x)。当发现一个新的副本(一个带有另一个标题)时,计数器应从头开始

输出应如下所示:

>acrdi | AD19082 STSTAFPLLTQFYGCAIIILVLAMCSCLVYAMYMMNSGLQTHESTVTQKVKDFSLQ WLQPILFGCWRHRLIAKSRNRSKIPMTGTEPPWNESKDAFENLKTWALNKQNRNCLL EINFLeakDfiVMCKDvCfeeddKderNLCLKTLTEAFFLRNCCAETPKNQSFvis SGVAKQAIEVILLLRPVFQEREKGTEVITIRSGLQLLGNTVVVVVKnitdQEFFIWNCCP QFLDVLLSRHHSIQDCMCIIFNCLNQQRRLQLVNNPKIisQIVHLCADKSLLEWGYFI LDCLICEGFPDLYQGMEFDPLALILLDLFQVKITTALDESERTTETPKELYASSL NYLAEQFETYFIDIIQRLQLDYSNSNDFQVLVVTRRLLSLSTGLKSSMTGLQDRASL LETCVDLLRETSKPEAKAAFKRPGTSYWEYVLPTFP

>acrdi | AD19082-1 MLRQSEPPWNESKDAFELKTWALNKQNRNCLLEINFLECKDFIVCKDVCFEDKDE RNLNLCLKTLEAFRFRNCCAETPKNQSFVISSGVAKQAEIVILLLRPVFQEEKGTE VITDTIRSGLQLLLGNTVVVKnitdQEFLFLLSRHHSIQDCLCMIIFNCLN QQRRLQLVNpkiSqVHLCADKSLLEWGYFILDCLIPGLFPDLYQGMEFDPLALIL LDLFQVKITDALDESERTTETPKELYASSLNYLAEQFETYFIDIIQRLQLQLDYSND FFQVLVVTRLLSTSTGLQDRASLLETCVDLRETSKPEAKAAFSNSSFP HSVDSgrispShgFqrDlvrVignmCqHfPnPnQeKvredgipllLDHCNIDDHnPyIcq Waifairnvlennkenqdivasihplgladmsrlqfgvgdavefdgeki

我更喜欢使用awk或sed的方法,这样我就可以轻松地修改代码,以便在目录中的所有文件上运行

我必须承认,我刚刚开始学习编程和解析,但我希望这不是一个愚蠢的问题

请提前发送THX以获取帮助。

awk脚本:

BEGIN {
    OFS="\n";
    ORS=RS=">";
} 
{
    name = $1;
    $1 = "";
    suffix = names[name] ? "-" names[name] : "";
    print name suffix $0, "\n";
    names[name]++;
}

上面使用“>”作为记录分隔符,并检查第一个字段(可以复制的标题名)。对于打印的每一行,在字段出现的每一次额外时间,它都会在标题名称后添加一个后缀(即,第一次dup为“-1”,第二次dup为“-2”)。

请使用代码块(Ctrl-k),而不是引用示例数据。此外,我怀疑我们不需要看到所有这些行-如果您将其减少到最低限度以证明问题,这将是一件好事。输入是否已排序,即重复的标题是否总是一个接一个地出现?我知道您希望我们提供解决方案。你试过什么?如果你被卡住了,试着自己做。回到这里,在新的问题中,描述阻止您前进的问题。使用python和biopython包,您需要的一切都已经存在了。不要重新发明轮子。@TomFenech:谢谢你的回复。我将来会这样做。这个问题似乎已经解决了。@GingerPlusPlus我用一些基本的awk脚本自己尝试过,但我目前正在开始学习编程。所以我尝试了不同的方法。下一次,我将展示我所尝试的,并提出更具体的问题。