2017-05-17 34 views
2

私はfastaファイルのコンティグ内のヌクレオチドを数えています。私のファイルには、私のコマンドが同じ行のawkプリント出力

awk '/^>/ {if (seqlen){print seqlen}; print ;seqlen=0; } { seqlen += length($0)}END{print seqlen}' 

出力は以下のように、同じ行に出力を得るためにどのように

>1 
23 
>2 
21 

ようになりましたです

>1 
    ATACCTACTA 
    ATTTACGTCA 
    GTA 
    >2 
    ATATTCGTAT 
    GTCTCGATCT 
    A 
    >3 

などのように見えます

>1 23 
>2 21 

答えて

1

とさらにいくつかの変更と出来上がり(@Edモートンのおかげで):あなたの答えのための

awk '/^>/ {if(seqlen)print k,seqlen; seqlen=0; k=$0; next;} { seqlen += length($0);}END{print k,seqlen;}' filename 
0

この1つは私の作品:

awk '/^>/ && NR>1 {printf " %d \n", x; }/^>/{ printf "%s", $0 }!/^>/{ x += length($0) } file 

私は期待どおりに機能するようになりました願っています。

+0

感謝。私は正しい例で私の質問に言及しなかった。私は各行だけを数えたいとは思わないが、文字 ">"の間の行は、私の質問を編集している。私が使用しているawkコマンドは正しい動作をしますが、今は入力と同じ行に出力します。あなたのソリューションでは、それは行だけを数えますが、行のすべての行を>で数えなければなりません。 – Gravel

+0

私は私の答えを変えました。今すぐ動作するはずです:) – JFS31

+0

@Gravel:今すぐ確認してください。私の答えが更新されました。 – RavinderSingh13

0

試してみてください。

awk '/^>/{printf("%s ",$0);getline;printf("%s\n",length($0))}' Input_file 

ラインは現在、その行を印刷する次の行にジャンプするのgetlineを使用して、その後>から始まっているかどうかの確認。現在の行の長さを新しい行で表示し、次にInput_fileを記述します。

EDIT:VAL変数と次の意志、変数QのとVALの値を印刷して、その後、Qを無効にされていない場合VAL変数がNULLでない場合は任意の行は>から始まるかどうかの確認

awk '/^>/{if(VAL){print Q OFS VAL;Q=VAL="";Q=$0;next};Q=$0;next} {VAL=VAL?VAL+length($0):length($0)} END{print Q,VAL}' Input_file 

が、その後のチェックそれ以外の文をすべてスキップします。そうでない場合、Qを$ 0にして、nextをskep文の次に使用します。 VALという名前の変数を作成すると、各行の長さが計算され、それ自身の値が追加されます。 ENDセクションでQ、VALの値を出力します。

+0

あなたの答えをありがとう。私は正しい例で私の質問に言及しなかった。私は各行だけを数えたいとは思わないが、文字 ">"の間の行は、私の質問を編集している。私が使用しているawkコマンドは正しい動作をしますが、今は入力と同じ行に出力します。あなたのソリューションでは、それは行だけを数えますが、行のすべての行を>を使って数えなければなりません – Gravel

関連する問題