在 fasta 序列名称中添加标签

add a tag into the fasta sequence name

我需要帮助。 我有一个 fasta 文件,例如:

>YP_00698.1 hypothetical protein sp [Species 1]
MDMQFGYFTRNPSTKYPATLYPREVSCALYEDDNENTSLIPKSRHYHYTIQPPINYKKLTNVDRYKNFRL

>YP_0098.1 hypothetical protein sp [Species 2]
MDMQFGYFTRNPSTKYPATLYPREVSCALYEDDNENTSLIPKSRHYHYTIQPPINYKKLTNVDRYKNFRL

>YP_009378.1 hypothetical protein sp [Species 3]
MEDNTAEDIIKNHLLNTSNDDDDDADSLKKKKENIDDIVKESKNVNLFFISYIKAYNDLVLFLKQQEIVFINILHLNNLNLSIYNLLQKCYSTKDKYKFLPDNNKNLLQLILTLKKNVKFRLKRLKDK

我正在寻找 bash 方法以便在 >Seqnames 之后添加 "_CT",所以我应该得到:

>YP_00698.1_CT hypothetical protein sp [Species 1]
MDMQFGYFTRNPSTKYPATLYPREVSCALYEDDNENTSLIPKSRHYHYTIQPPINYKKLTNVDRYKNFRL

>YP_0098.1_CT hypothetical protein sp [Species 2]
MDMQFGYFTRNPSTKYPATLYPREVSCALYEDDNENTSLIPKSRHYHYTIQPPINYKKLTNVDRYKNFRL

>YP_009378.1_CT hypothetical protein sp [Species 3]
MEDNTAEDIIKNHLLNTSNDDDDDADSLKKKKENIDDIVKESKNVNLFFISYIKAYNDLVLFLKQQEIVFINILHLNNLNLSIYNLLQKCYSTKDKYKFLPDNNKNLLQLILTLKKNVKFRLKRLKDK

我试过了:

sed 's/^\(>.*\)$/ _CT/' fastafile.fa

但我在最后得到 "_CT"...

感谢您的帮助。

这可以通过 awk 轻松完成,请您尝试以下操作。

awk '/^>/{="_CT"} 1' Input_file

说明:为上述 awk 代码添加说明。

awk '            ##Starting awk program here.
/^>/{            ##Checking condition if a line starts from > then do following.
  ="_CT"     ##Setting value of  to  and concatenating _CT to it too.
}                ##Closing BLOCK for this condition here.
1                ##Mentioning 1 will print edited/non-edited line.
' Input_file     ##Mentioning Input_file name here.

sed解法:

sed '/^>/s/\([^ ]*\)\(.*\)/_CT/'  Input_file

问题是 .* 可以匹配整行,尤其是当您的搜索模式包含 $ "end of line" 锚点时。使用只能匹配序列名称的东西,例如 [^ ]* (连续的非 space 字符的序列):

sed 's/^\(>[^ ]*\)/_CT/' fastafile.fa

你可以try it here.

您可以使用sed喜欢

sed 's/^>[^[:space:]]\{1,\}/&_CT/' fastafile.fa > newfastafile.fa
sed 's/^>[^ \t]\{1,\}/&_CT/' fastafile.fa > newfastafile.fa
sed -E 's/^>[^ \t]+/&_CT/' fastafile.fa > newfastafile.fa

online demo

详情

  • ^ - 字符串开头
  • > - 一个 > 字符
  • [^[:space:]]\{1,\} - 除空格外的 1 个或多个字符。注意 \{1,0\} 可以在 POSIX ERE 模式中写成 +(使用 -E-r 选项启用)

替换部分的&代表整个匹配值

只需将每行的第一个 space 替换为 _CT:

sed 's/ /_CT /' input_file.fasta

这应该足够了,因为 FASTA 序列行不应包含任何 spaces