タンパク質配列を含むテキストファイルがあります。各シーケンスの残基の総数を取得したいと思います。どうすればawkでこれを行うことができますか?
>1GS9
PYCPAAVIAPVV
>1LE2
DFEFAKWKN
>1NFN
ADAPPDS
必要な出力
1GS9 - 12
1LE2 - 9
1NFN - 7
タンパク質配列を含むテキストファイルがあります。各シーケンスの残基の総数を取得したいと思います。どうすればawkでこれを行うことができますか?
>1GS9
PYCPAAVIAPVV
>1LE2
DFEFAKWKN
>1NFN
ADAPPDS
必要な出力
1GS9 - 12
1LE2 - 9
1NFN - 7
awk '/^>/ {
name=substr($0,2);
getline;
printf("%s - %d\n", name, length($1))
}' input_file
あなたはこれを行うことができます:
awk '/^>/ { res=substr($0, 2); } /^[^>]/ { print res " - " length($0); }' < file
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
>
これはうまくいくかもしれません(GNU awk):
awk -vRS='>' -vOFS=' - ' 'NR>1{print $1,length($2)}' file
すべての奇数行を自動的に読み取り、偶数行{ ... }
のタンパク質を次のように読み取りますgetline
。
awk ' {
getline prot;
printf "%s - %d\n", substr( $0, 2 ), length( prot )
}' infile
出力:
1GS9 - 12
1LE2 - 9
1NFN - 7