将字符保留在 fasta 标头中两个特定字符之间并删除其余字符

将字符保留在 fasta 标头中两个特定字符之间并删除其余字符

我试图将 fasta 标头中的字符保留在第一个和第二个冒号之间。由于我的编码技能非常有限,我尝试使用 sed 和 awk 失败了。

在:

>TRINITY_DN10034_c0_g1:TRINITY_DN10034_c0_g1_i1:g.1561:m.1561
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1:TRINITY_DN10322_c0_g1_i2:g.1424:m.1424
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

预期的:

>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

有什么帮助吗?

答案1

awk

awk -F: '{ if (NF==1) { print } else { print ">"$2 } }' file

或者稍微压缩一点

awk -F: '{ print (NF==1) ? $1 : ">"$2 }' file

:如果该行只有一个字段,则使用字段分隔符并打印第一个字段,>否则打印第二个字段。

sed

sed 's/^>[^:]\+:\([^:]\+\).*/>\1/' file

答案2

与标准sed

$ sed '/^>/{ s/[^:]*:/>/; s/:.*//; }' file.fa
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

这将两个替换应用于s/[^:]*:/>/以a 开头的s/:.*//所有行(fasta 标题行)。file.fa>

第一次替换将替换行的开头,直到第一个:字符(包括第一个字符)>

第二次替换将删除从:结果数据中的第一个(:原始行中的第二个)到该行末尾的所有内容。

这将留下第二个:- 分隔字段,前缀为>.


与标准awk

$ awk -F ':' '/^>/ { $0 = ">" $2 } { print }' file.fa
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

这将用作:字段分隔符,当遇到以 开头的行时>,它将替换完整行,>后跟第二个:- 分隔字段。所有行,无论是否修改,都会被打印。

答案3

建议的解决方案:

使用 GNU sed

cut -f2 -d':' file | sed '1~2s/^/>/'

输出:

>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

答案4

有多种方法可以处理此 PBM,其中一些是:

$ cut -d: -f2 | sed -e '$!N;s/^/>/' file

$ awk -F: '/^>/{$0 = ">" $2}1' file

$ perl -F: -pale ' s/^>\K.*/$F[1]/' file

$ sed -e '
   /\n/{P;d;}
   /^>/y/:/\n/
   s/\n/&>/;//D
' file

结果

>TRINITY_DN10034_c0_g1_i1 
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2 
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

相关内容