Bash 在fasta序列名称中添加标记

Bash 在fasta序列名称中添加标记,bash,awk,sed,bioinformatics,fasta,Bash,Awk,Sed,Bioinformatics,Fasta,我需要帮助。 我有一个fasta文件,例如: >YP_00698.1 hypothetical protein sp [Species 1] MDMQFGYFTRNPSTKYPATLYPREVSCALYEDDNENTSLIPKSRHYHYTIQPPINYKKLTNVDRYKNFRL >YP_0098.1 hypothetical protein sp [Species 2] MDMQFGYFTRNPSTKYPATLYPREVSCALYEDDNENTSLIPKSRHYHYTIQPPI

我需要帮助。 我有一个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之后添加
“\u 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/^\(>.*\)$/\1 _CT/' fastafile.fa
但是最后我得到了
“\u CT”


谢谢你的帮助

这可以用
awk
轻松完成,请尝试以下操作

awk '/^>/{$1=$1"_CT"} 1' Input_file
说明:为上述
awk
code添加说明

awk '            ##Starting awk program here.
/^>/{            ##Checking condition if a line starts from > then do following.
  $1=$1"_CT"     ##Setting value of $1 to $1 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/\([^ ]*\)\(.*\)/\1_CT\2/'  Input_file

问题是,
*
可以并且将匹配整行,特别是当您的搜索模式包括
$
的“行尾”锚时。改为使用只能与序列名称匹配的内容,例如
[^]*
(连续的非空格字符序列):


您可以。

您可以像这样使用
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

详细信息

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

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

只需将每行的第一个空格替换为
\u CT

sed 's/ /_CT /' input_file.fasta
这应该足够了,因为FASTA序列线不应包含任何空格

sed 's/ /_CT /' input_file.fasta