我怎样才能更改 fasta 文件中的所有行:
>vsearch_derep1;size=1 331 95 544 TRINITY_DN40607_c0_g1_i1 len=2000path=[0:0-1097]
ATGGGATTAACTGGTAAGTTAATTGCTGCAATAGAGTTTAAGGCTGGTGGTGATGTTTTC
CATGAGCTGTTCAGGCACAAGCCACAACATTTATCCACAGTAAGCTCTGAGAAAGTACAA
对此:
>TRINITY_DN40607_c0_g1_i1
ATGGGATTAACTGGTAAGTTAATTGCTGCAATAGAGTTTAAGGCTGGTGGTGATGTTTTC
CATGAGCTGTTCAGGCACAAGCCACAACATTTATCCACAGTAAGCTCTGAGAAAGTACAA
这意味着我想删除“>”和“TRINITY_”之间的所有内容,以及“TRINITY_DN40607_c0_g1_i1”之后的所有内容。请注意,“i”后面的“1”在整个 fasta 文件中会有所不同。
我将感谢你的帮助
答案1
您可以使用sed
正则表达式\(TRINITY_[^[:blank:]]*\)
来匹配最长的非空白字符序列,然后TRINITY_
重新替换整个序列描述:
sed 的/^>。(TRINITY_[^[:空白:]]).*/>\1/' --就地文件.fasta
答案2
像awk
这样:
awk '{for (i=1; i<=NF; ++i) {if ($i ~ "TRINITY_") {$0=">"$i}}}1' file.fasta
如果TRINITY_
在字段中找到,则用该字段前面的替换整行>
并打印所有行...上述命令不会编辑原始文件file.fasta
,而只会输出行...要获取文件中的输出output.fasta
,请执行以下操作:
awk '{for (i=1; i<=NF; ++i) {if ($i ~ "TRINITY_") {$0=">"$i}}}1' file.fasta > output.fasta
或就地编辑原始文件(原始文件将被修改)gawk
如下所示:
gawk -i inplace '{for (i=1; i<=NF; ++i) {if ($i ~ "TRINITY_") {$0=">"$i}}}1' file.fasta