我有一个Multiplex fasta文件,我需要更改序列的ID。 所以现在我的fasta文件看起来像这样:
>CAR1_1
TACGTAGGGGGCAAGCGTTGTCCGGAATTATTGGGCGTAAAGGGTACGCAGGCGGTTTTTTAAGTCTGATGTGAAATCTC
ATAGCTTAACTATGAGCGGTCATTGGAAACTGGAGAACTTGAGTATAGAAGAGAAGAGTGGAATTCCAAGTGTAGCGGTG
AAATGCGTAGATATTTGGAGGAACACCAGTGGCGAAGGCGACTCTTTGGTCTATTACTGACGCTGAGGTACGAAAGCGTG
GGGAGCAAAC
>CAR7_2
TACGTAGGGAGCAAGCGTTGTTCGGATTTACTGGGCGTAAAGGGCGCGTAGGCGGCGCAGTAAGTTACTTGTGAAATCTC
TGGGCTTAACCCAGAACGGCCAAGTAATACTGCAGTGCTAGAGTGCAGAAAGGGCAATCGGAATTCTTGGTGTAGCGGTG
AAATGCGTAGATATCAAGAGGAACACCTGAGGCGAAGGCGGGTTGCTTGTCTGACACTGACGCTGAGGCGCGAAAGCCAG
GGGAGCAAAC
我想要做的是将所有内容删除到符号" =" (">"除外),删除条形码标签后的" [数字]并添加" [顺序号码]"对于每个序列的每个Id
像:
$("#treeview").data("kendoTreeView").dataItems()
(依此类推......)
这可能吗?
答案 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 }
如果行没有前导>
,只需打印它即可。