我有一個如下所示的 multifasta 文件:(所有序列都>100bp,多于一行,且長度相同)>Lineage1_samplenameACGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage2_samplenameBAAATTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAG>Lineage3_samplenameCCGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage3_samplenameDCGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA我需要刪除重復項,但至少要保持每個譜系的順序。因此,在上面的這個簡單示例中(注意 samplenameA、C 和 D 是相同的),我只想刪除 samplenameD 或 samplenameC,而不是同時刪除它們。最后我想獲得與原始文件中相同的標題信息。示例輸出:>Lineage1_samplenameACGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage2_samplenameBAAATTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAG>Lineage3_samplenameCCGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA我找到了一種只刪除重復項的方法。感謝皮埃爾林登鮑姆。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/'在我上面的例子中運行它會導致:>Lineage1_samplenameACGCTTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAA>Lineage2_samplenameBAAATTCAACGGAATGGATCTACGTTACAGCCTGCATAAAGAAAACGGAGTTGCCGAGGACGAAAGCGACTTTAGGTTCTGTCCGTTGTCTTTGGCGGAAG—> 所以失去了血統 3 序列現在我只是在尋找一種快速解決方案來刪除重復項,但基于 fasta 標頭每個譜系至少保留一個序列。我是腳本新手……歡迎使用 bash/python/R 中的任何想法。
如何從 fasta 文件中刪除重復項,但根據標題每組至少保留一個
幕布斯6054654
2023-03-30 16:38:56