在 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
详情
^
- 字符串开头
>
- 一个 >
字符
[^[:space:]]\{1,\}
- 除空格外的 1 个或多个字符。注意 \{1,0\}
可以在 POSIX ERE 模式中写成 +
(使用 -E
或 -r
选项启用)
替换部分的&
代表整个匹配值
只需将每行的第一个 space 替换为 _CT
:
sed 's/ /_CT /' input_file.fasta
这应该足够了,因为 FASTA 序列行不应包含任何 spaces
我需要帮助。 我有一个 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
详情
^
- 字符串开头>
- 一个>
字符[^[:space:]]\{1,\}
- 除空格外的 1 个或多个字符。注意\{1,0\}
可以在 POSIX ERE 模式中写成+
(使用-E
或-r
选项启用)
替换部分的&
代表整个匹配值
只需将每行的第一个 space 替换为 _CT
:
sed 's/ /_CT /' input_file.fasta
这应该足够了,因为 FASTA 序列行不应包含任何 spaces