>
誤ったヘッダー(欠落など)を含む一部のシーケンスと、適切なヘッダーを含む一部のシーケンスを意図的に含む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