在多行fasta文件中更改序列SeqIds

时间:2016-10-19 11:56:24

标签: rename fasta

我有一个Multiplex fasta文件,我需要更改序列的ID。 所以现在我的fasta文件看起来像这样:

>CAR1_1
TACGTAGGGGGCAAGCGTTGTCCGGAATTATTGGGCGTAAAGGGTACGCAGGCGGTTTTTTAAGTCTGATGTGAAATCTC
ATAGCTTAACTATGAGCGGTCATTGGAAACTGGAGAACTTGAGTATAGAAGAGAAGAGTGGAATTCCAAGTGTAGCGGTG
AAATGCGTAGATATTTGGAGGAACACCAGTGGCGAAGGCGACTCTTTGGTCTATTACTGACGCTGAGGTACGAAAGCGTG
GGGAGCAAAC
>CAR7_2
TACGTAGGGAGCAAGCGTTGTTCGGATTTACTGGGCGTAAAGGGCGCGTAGGCGGCGCAGTAAGTTACTTGTGAAATCTC
TGGGCTTAACCCAGAACGGCCAAGTAATACTGCAGTGCTAGAGTGCAGAAAGGGCAATCGGAATTCTTGGTGTAGCGGTG
AAATGCGTAGATATCAAGAGGAACACCTGAGGCGAAGGCGGGTTGCTTGTCTGACACTGACGCTGAGGCGCGAAAGCCAG
GGGAGCAAAC

我想要做的是将所有内容删除到符号" =" (">"除外),删除条形码标签后的" [数字]并添加" [顺序号码]"对于每个序列的每个Id

像:

$("#treeview").data("kendoTreeView").dataItems()

(依此类推......)

这可能吗?

2 个答案:

答案 0 :(得分:0)

Python中的一个简单解决方案是:

sequences = """>Mafalda01_2759;barcodelabel=CAR1_01
TACGTAGGGGGCAAGCGTTGTCCGGAATTATTGGGCGTAAAGGGTACGCAGGCGGTTTTTTAAGTCTGATGTGAAATCTC
ATAGCTTAACTATGAGCGGTCATTGGAAACTGGAGAACTTGAGTATAGAAGAGAAGAGTGGAATTCCAAGTGTAGCGGTG
AAATGCGTAGATATTTGGAGGAACACCAGTGGCGAAGGCGACTCTTTGGTCTATTACTGACGCTGAGGTACGAAAGCGTG
GGGAGCAAAC
>Mafalda02_51112;barcodelabel=CAR7_04
TACGTAGGGAGCAAGCGTTGTTCGGATTTACTGGGCGTAAAGGGCGCGTAGGCGGCGCAGTAAGTTACTTGTGAAATCTC
TGGGCTTAACCCAGAACGGCCAAGTAATACTGCAGTGCTAGAGTGCAGAAAGGGCAATCGGAATTCTTGGTGTAGCGGTG
AAATGCGTAGATATCAAGAGGAACACCTGAGGCGAAGGCGGGTTGCTTGTCTGACACTGACGCTGAGGCGCGAAAGCCAG
GGGAGCAAAC
>Mafalda01_145359;barcodelabel=CAC11_86
TACGGAGGATCCAAGCGTTATCCGGAATCATTGGGTTTAAAGGGTCCGTAGGCGGACAATTAAGTCAGCGGTGAAAGTCT
GTAGCTCAACTATAGAACTGCCGTTGATACTGGTTGTCTTGAATCAATGTGAAGTGGCTAGAATATGTGGTGTAGCGGTG
AAATGCTTAGATATCACATAGAACACCGATTGCGAAGGCAGGTCACTAACATTGCATTGACGCTGATGGACGAAAGCGTG
GGGAGCGAAC
>Mafalda02_3119;barcodelabel=CAR4_03
TACGGGGGGTGCGAGCGTTGTCCGGAATCACTGGGCGTAAAGGGCGCGTAGGTGGTCTTATAAGGGTGTGGTGAAAGCCC
GGGGCTCAACCCCGGGTCGGCCGTGCCGACTGTGAGACTAGAGTGCTGTAGGGGCAGGCGGAATTCCGGGTGTAGCGGTG
GAATGCGTAGAGATCCGGAGGAAGACCGGTGGCGAAGGCGGCCTGCTGGGCAGATACTGACACTGAGGCGCGACAGCGTG
GGGAGCAAAC"""

index = 0
for line in sequences.splitlines():
    if line.startswith('>'):
        index += 1
        output = line[line.find('barcodelabel=') + len('barcodelabel='):]
        output = output[:output.find('_') + 1]
        print('>' + output + str(index))
    else:
        print(line)

您可以read来自文件的序列并将其存储在sequences中,或将<{1}}替换为

for line in

可能性无穷无尽......

答案 1 :(得分:0)

awk

awk 'BEGIN { c=1 } $1 ~ /^>/ { s=gensub(/.*=([A-Z0-9]+)_[0-9]+$/,">\\1_"c,"g",$1); print s; c+=1 } $1 !~ /^>/ { print }' seqs.fa

首先,对序列记录进行无意识计数:

BEGIN { c = 1 }

有趣的是:

$1 ~ /^>/ { s=gensub(/.*=([A-Z0-9]+)_[0-9]+$/,">\\1_"c,"g",$1); print s; c+=1 }

$1 ~ /^>/ { ... }只会与排名为>的行匹配。

然后,gensub会将最后=之后的内容捕获到\\1,不包括尾随_[0-9]+,然后打印">\\1_"c,其中c }是上面初始化的计数器的值。打印字符串s,然后递增计数器。

第二位代码是:

$1 !~ /^>/ { print }

如果行没有前导>,只需打印它即可。