幕布斯6054654
2023-03-30 16:38:56
我有一個如下所示的 multifasta 文件:(所有序列都>100bp,多于一行,且長度相同)>Lineage1_samplenameACGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage2_samplenameBAAATTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAG>Lineage3_samplenameCCGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage3_samplenameDCGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA我需要刪除重復(fù)項,但至少要保持每個譜系的順序。因此,在上面的這個簡單示例中(注意 samplenameA、C 和 D 是相同的),我只想刪除 samplenameD 或 samplenameC,而不是同時刪除它們。最后我想獲得與原始文件中相同的標(biāo)題信息。示例輸出:>Lineage1_samplenameACGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage2_samplenameBAAATTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAG>Lineage3_samplenameCCGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA我找到了一種只刪除重復(fù)項的方法。感謝皮埃爾林登鮑姆。sed -e '/^>/s/$/@/' -e 's/^>/#/'file.fasta |\tr -d '\n' | tr "#" "\n" | tr "@""\t" |\sort -u -t ' ' -f -k 2,2 |\sed -e 's/^/>/' -e 's/\t/\n/'在我上面的例子中運行它會導(dǎo)致:>Lineage1_samplenameACGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage2_samplenameBAAATTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAG—> 所以失去了血統(tǒng) 3 序列現(xiàn)在我只是在尋找一種快速解決方案來刪除重復(fù)項,但基于 fasta 標(biāo)頭每個譜系至少保留一個序列。我是腳本新手……歡迎使用 bash/python/R 中的任何想法。
1 回答

qq_花開花謝_0
TA貢獻(xiàn)1835條經(jīng)驗 獲得超7個贊
在這種情況下,我可以看到兩個相對較好的選擇。A) 查看現(xiàn)有工具(例如 Biopython 庫或 FASTX 工具包。我認(rèn)為它們都有很好的命令來完成此處的大部分工作,因此學(xué)習(xí)它們可能是值得的?;蛘?,B) 編寫您自己的工具。在這種情況下,您可能想嘗試(我會堅持使用 python):
逐行遍歷文件,并將譜系/序列數(shù)據(jù)添加到字典中。我建議使用序列作為鍵。這樣,您可以很容易地知道您是否已經(jīng)遇到過此密鑰。
myfasta = {}
if myfasta[sequence]:
myfasta[sequence].append(lineage_id)
else:
myfasta[sequence] = [lineage_id]
這樣你的鍵(序列)將保存具有相同序列的 lineage_ids 列表。請注意,此解決方案的煩人之處在于遍歷文件、將 lineage-id 與序列分開、考慮可能擴(kuò)展到多行的序列等。
之后,您可以遍歷字典,并僅使用字典中列表中的第一個 lineage_id 將序列寫入文件。
添加回答
舉報
0/150
提交
取消