ファイルから「>」と「バクテリア」という単語の間の部分を削除するにはどうすればよいですか?

ファイルから「>」と「バクテリア」という単語の間の部分を削除するにはどうすればよいですか?

ファイル内のすべての項目と単語>の間の部分を削除したいと思います。Bacteria

  • 以下は入力の例です。
    >AADV02000003.105686.107093 Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;
    
  • 結果は次のようになります。
    >Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;
    

これはFASTAファイル(生物情報学の一般的なファイル形式)なので、>常に行の最初の非空白文字があります一つこんなキャラクターになります。

使用を検討していますが、sedコマンドの設定方法がわかりません。ご協力ありがとうございます。

答え1

ヘッダーがaで始まり、行の空白ではなく最初の文字としてのみ表示される複数のヘッダーとシーケンス行を含むfastaファイルであると仮定すると、>次の>ことができます。

sed 's/^ *>[^ ]* />/' file.fa 

これにより、ゼロ個以上のスペースで始まり、その後にaと行が続く行を見つけ、行の先頭>から>最初のスペースまですべてを置き換えて、>最初のスペースの前のすべてを効果的に削除します。

標準出力として印刷するのではなく、元のファイルを編集するには、次のようにします。

sed -i.bak 's/^ *>[^ ]* />/' file.fa 

file.fa.bakこれにより、元のファイルのコピーになるというファイルが作成されます。

答え2

使用sed

$ sed 's/[A-Z][^ ]* //' input_file
>Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;

答え3

使用幸せ(以前のPerl_6)

raku -pe 's/^ \> <(.+?)> Bacteria\; //;' 

つまり、-pe使い慣れた代替演算子と組み合わせたRakuの自動印刷行別フラグを使用してくださいs///。演算子の左半分は、4つの正規表現原子、幅0の^文字列開始原子、エスケープされたバックスラッシュ\>、貪欲でない.+?任意の文字を1回以上検索し、次に単語を検索しますBacteria\;

貪欲ではない.+?原子を包み込んでいます<()>これが楽のキャプチャマーク。 4つの原子(元素)をすべて検索しますが、<(.+?)>代替演算子の右半分の置換のみをキャプチャします。

最後に、置換演算子の右半分には、Rakuにそれをキャプチャして削除するように指示する文字は含まれていません(「nullに置き換え」)。

入力例:

>AADV02000003.105686.107093 Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;

出力例:

>Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;

https://docs.raku.org/言語/regexes
https://raku.org/

答え4

私は使用しますgrep代わりに。細菌ラインだけが欲しいなら、

grep -o 'Bact.*$' file.fa

必要なものが最初のスペースの後に出ることができる場合は、次のものを使用できます(先行スペースを含む)。

grep -o ' .*$' file.fa

「>」で始まる行だけが必要で、後続の内容と一致するには、次の2つの手順を実行する必要があります。

grep '^>.*$' file.fa | grep -o ' .*$'

関連情報