如何使用awk计算序列中的残留物总数?

如何使用awk计算序列中的残留物总数?,awk,Awk,我有一个包含蛋白质序列的文本文件。我想得到每个序列中的残基总数。我怎样才能用awk做到这一点 >1GS9 PYCPAAVIAPVV >1LE2 DFEFAKWKN >1NFN ADAPPDS 期望输出 1GS9 - 12 1LE2 - 9 1NFN - 7 1GS9 - 12 1LE2 - 9 1NFN - 7 您可以这样做: awk '/^>/ { res=substr($0, 2); } /^[^>]/ { print res " - " length(

我有一个包含蛋白质序列的文本文件。我想得到每个序列中的残基总数。我怎样才能用awk做到这一点

>1GS9
PYCPAAVIAPVV
>1LE2
DFEFAKWKN
>1NFN
ADAPPDS
期望输出

1GS9 - 12
1LE2 - 9
1NFN - 7
1GS9 - 12
1LE2 - 9
1NFN - 7
您可以这样做:

 awk '/^>/ { res=substr($0, 2); } /^[^>]/ { print res " - " length($0); }' < file
awk'/^>/{res=substr($0,2);}/^[^>]/{print res“-”长度($0);}'
使用
{…}
自动读取每个奇数行,使用
getline
自动读取偶数行中的蛋白质:

awk ' {
    getline prot;
    printf "%s - %d\n", substr( $0, 2 ), length( prot ) 
}' infile
输出:

测试如下:

> cat temp
>1GS9
PYCPAAVIAPVV
>1LE2
DFEFAKWKN
>1NFN
ADAPPDS
> awk '{line=substr($0,2);getline;print line,"-",length($0)}' temp
1GS9 - 12
1LE2 - 9
1NFN - 7
> 
这可能适合您(GNU awk):


>1GS9 PYCPAAVIAPVV
表示调用
1GS9
并返回
PYCPAAVIAPVV
??
awk '{line=substr($0,2);getline;print line,"-",length($0)}' temp
> cat temp
>1GS9
PYCPAAVIAPVV
>1LE2
DFEFAKWKN
>1NFN
ADAPPDS
> awk '{line=substr($0,2);getline;print line,"-",length($0)}' temp
1GS9 - 12
1LE2 - 9
1NFN - 7
> 
awk -vRS='>' -vOFS=' - ' 'NR>1{print $1,length($2)}' file