Awk 计算fasta文件中的剩余数
我有一个包含蛋白质序列的fasta文件。如何使用awk计算每个序列中的剩余数Awk 计算fasta文件中的剩余数,awk,Awk,我有一个包含蛋白质序列的fasta文件。如何使用awk计算每个序列中的剩余数 >seq1 PESDFA >seq2 >seq3 GFCSSWWR 期望输出 seq1 6 seq2 0 seq3 8 此awk为您提供了一些: awk -v FS="" '!/^>/ {print f,NF} {f=substr($0,2)}' file seq1 6 seq3 8 要获得seq2,您可以执行以下操作: awk '{printf (/^>/&
>seq1
PESDFA
>seq2
>seq3
GFCSSWWR
期望输出
seq1 6
seq2 0
seq3 8
此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和info更改为一行,下一部分给出长度。这行不太好,但适用于您的示例:
kent$ paste f <(sed '1d' f)|awk '/^>/{print $1, ($2~/^>/?0:length($2))}'
>seq1 6
>seq2 0
>seq3 8
如果您关心输出的顺序,只需保留一个单独的seq值数组
谢谢你的回答。我应该在输出中将seq2设为零。可能吗?
$ 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
$ 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