文字で始まる行とその後の行だけを保持する方法

文字で始まる行とその後の行だけを保持する方法

>誤ったヘッダー(欠落など)を含む一部のシーケンスと、適切なヘッダーを含む一部のシーケンスを意図的に含むFASTAファイルがあります。ファイルのフォーマットは、一行にヌクレオチド配列を含む。

例:

2865958
AACTACTACAG
>hCoV-19/2832832
ACTCGGGGGG
28328332
ATTCCCCG
>hCoV-19/2789877
ACTCGGCCC

>次のように、正しいヘッダー(たとえば、で始まる行)を持つシーケンスのみを維持したいと思います。

>hCoV-19/2832832
ACTCGGGGGG
>hCoV-19/2789877
ACTCGGCCC

さまざまな方法(sed、grep、awk)を試しましたが、正しい結果がありませんでした。

awk '/^>/ { ok=index($0,"hCoV")!=0;} {if(ok) print;}' combined_v4.fa > combined_v5.fa

sed -n '/^>.*hCoV/,/^>/ {/^>.*hCoV/p ; /^>/! p}' combined_v4.fa > combined_v5.fa

grep -w ">" -A 1 combined_v4.fa > combined_v5.fa

何をすべきか知っていますか?

答え1

Tellはgrepまた、で始まる行を探して、>次の行も含みます。

grep -A1 --no-group-separator '^>' combined_v4.fa > combined_v5.fa

grepあなたのバージョンがそれをサポートしていない場合は、--no-group-separator以下を試してください。

grep -A1 '^>' combined_v4.fa | grep -v '^--$' > combined_v5.fa

答え2

sedの1つの方法は次のとおりです。

sed -n '/^>/!d;N;p' file

入力の最後の行が「>」で始まっても印刷されません。

awkを使用してください:

awk 'prev {print prev ORS $0; prev=""} /^>/ {prev=$0}' file

この2行を印刷するには、「>」の次の行を待ちます。正規表現に加えて、次のものもindex()使用できます。

awk 'prev {print prev ORS $0; prev=""} index($0,">")==1 {prev=$0}' file

^>">"で始まる文字列に一致する正規表現です。文字列 "">"の開始位置を返します。レコードがthisで始まる場合、index($0,">")この位置は1()に等しくなければなりません。...==1

「hCoV」もあることを確認するには:

sed -n '/^>/!d;/hCoV/!d;N;p' file
awk 'prev {print prev ORS $0; prev=""} /^>/ && /hCoV/ {prev=$0}' file

答え3

awkを使用すると、次のようにできます。

awk '/^>/ {c=2} c-- > 0' file

>表示されたら、2行を印刷してください。

答え4

あなたはawk試すことができます:

awk 'f {print; f=0} /^>/ {print;f=1}' file
>hCoV-19/2832832
ACTCGGGGGG
>hCoV-19/2789877
ACTCGGCCC

  • この素晴らしい記事は、次のように役立ちます。

「一致するパターンに沿った行を印刷するには、sedまたはawkを使用してください。」:https://stackoverflow.com/questions/17908555/printing-with-sed-or-awk-a-line-following-a-matching-pattern

関連情報