我有一个包含250个fasta序列的文件。现在,他们看起来像这样:
>NP_041982.1 DNA polymerase [Enterobacteria phage T7]
我想更改标题,使它们看起来像这样:
>Enterobacteria phage T7
对于每个标题,我只想要括号之间的内容。我试图通过linux命令来做到这一点。
任何人都可以帮忙吗?
答案 0 :(得分:2)
file.fa内容
>Sequence One [Species 1]
actgtattagctaatcgatcagttacgattcga
tagctacgtacgtacgatcgatcagtcagctag
>Sequence Two [Species 2]
ttgtagctagctagctagctagctagctacgta
tgcatcgatcgattaatatcgcgccctaactcg
>Sequence Three
atgatagtctggtcatcgattcagtcagttcat
ttgcatgatctactagatcgatattagctagat
>Sequence Four [early bracket] text
tagctacgtacgatcgtacgatcgatcgtatat
gctagtcgactagctagctacgtacgtacgtaa
sed命令:
sed 's@^>[^\[]*\[\([^\]*\)]$@>\1@g' file.fa
看起来有点复杂,但这意味着...... 取任何符合“以>开头的行的模式的字符串,后跟除[之后的任意数量的字符]之后的任意数量的字符,然后是]。捕获括号之间的字符串,并替换整个匹配只是括号中的东西。
打印输出
>Species 1
actgtattagctaatcgatcagttacgattcga
tagctacgtacgtacgatcgatcagtcagctag
>Species 2
ttgtagctagctagctagctagctagctacgta
tgcatcgatcgattaatatcgcgccctaactcg
>Sequence Three
atgatagtctggtcatcgattcagtcagttcat
ttgcatgatctactagatcgatattagctagat
>Sequence Four [early bracket] text
tagctacgtacgatcgtacgatcgatcgtatat
gctagtcgactagctagctacgtacgtacgtaa
可以使用
将输出保存到新文件中sed 's@^>[^\[]*\[\([^\]*\)]$@>\1@g' file.fa > converted_filename.fa
请注意,没有匹配的任何标题都按原样打印,并且在最终括号后面包含字符的所有行也将按原样打印。如果它遇到未在同一条线上关闭的左括号,可能会行为奇怪。我建议您仔细检查新文件的行数是否与原始文件相同。