计算fasta文件中的残留数量

时间:2014-04-28 08:04:34

标签: awk

我有一个包含蛋白质序列的fasta文件。如何用awk计算每个序列中的残基数?

>seq1
PESDFA
>seq2
>seq3
GFCSSWWR

期望输出

 seq1  6
 seq2  0
 seq3  8  

3 个答案:

答案 0 :(得分:1)

这一行并不好,但适合你的例子:

kent$  paste f <(sed '1d' f)|awk '/^>/{print $1, ($2~/^>/?0:length($2))}' 
>seq1 6
>seq2 0
>seq3 8

答案 1 :(得分:0)

awk为您提供了一些:

awk -v FS="" '!/^>/ {print f,NF} {f=substr($0,2)}' file
seq1 6
seq3 8

要获得seq2,您可以执行此操作:

awk '{printf (/^>/&&NR>1?RS:"")"%s ",$0} END {print ""}' file | awk '{print substr($1,2),length($2)}'
seq1 6
seq2 0
seq3 8

第一部分将所有seq和信息更改为一行,下一部分给出长度。

答案 2 :(得分:0)

$ awk -F'>' '
    NF==2 { seq=$2; lgth[seq]=0; next }
    { lgth[seq]=length($0) }
    END { for (seq in lgth) print seq, lgth[seq] }
' file
seq1 6
seq2 0
seq3 8

如果您关心输出的顺序,只需保留一个单独的seq值数组

$ awk -F'>' '
    NF==2 { seq=$2; seqs[++numSeqs]=seq; next}
    { lgth[seq]=length($0) }
    END { for (i=1; i<=numSeqs; i++) print seqs[i], lgth[seqs[i]]+0 }
' file
seq1 6
seq2 0
seq3 8