如何使用 Ubuntu 命令行删除 fasta 文件中其他字符/字符串/模式之间、之前和之后的字符/字符串/模式

如何使用 Ubuntu 命令行删除 fasta 文件中其他字符/字符串/模式之间、之前和之后的字符/字符串/模式

我怎样才能更改 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

相关内容