特定のタンパク質のいくつかの配列(アミノ酸配列)を含むファスタファイルがあります。シーケンスの最後の文字は「*」で示され、これは実際に停止コドンを表す。 MUSCLEを使用して複数の配列アラインメントを実行しようとしていますが、ツールは最後に「*」を持つすべての配列を拒否します。
「*」を削除する方法?
たとえば、私の入力ファイルは次のようになります。
>seq1
MSDGFHS*
>Seq2
MSDRFH*
私に必要なのは:
>seq1
MSDGFHS
>Seq2
MSDRFH
答え1
そしてsed
。たとえば、
$ printf ">seq1\nMSDGFHS*\n>Seq2\nMSDRFH*\n" | sed -e 's/\*$//'
>seq1
MSDGFHS
>Seq2
MSDRFH
*
これにより、行の末尾にあるすべてのアスタリスク文字()が削除されます。
sedの-i
オプションを使用してソースファイルを編集できます。あるいはsed
、MUSCLEの出力を新しいfastaファイルにリダイレクトし、それをMUSCLEの入力として使用する方が良いでしょう(通常、他のプログラムでも元のファイルを使用する必要がある場合に最適です)。いいえ情報永久削除 - データが削除された場合に回復できるという保証はありません。特定の目的のためにファイルの一時修正バージョンを使用するのと同じように、常にバックアップを取ることをお勧めします。
答え2
データに*
永続化する他の場所が含まれていない場合は、次のように少しtr
作業を行う必要があります。
$ tr -d '*' < file
>seq1
MSDGFHS
>Seq2
MSDRFH
答え3
vi
働く:
vi file.txt
:1,$s/\*$//
ZZ
これはvi
ファイル()のすべての行を指定するように指示し、行末1,$
()でリテラル(正規表現メタ文字なのでエスケープされている)が見つかるたびに何もないものに置き換えられます(削除など)。*
$
現在削除されているコメントで指摘されているように、検索と@roaima
置換コマンドは次のように簡単に作成できます。
:%s/\*//
答え4
使用幸せ(以前のPerl_6)
raku -pe 's/ \* $ //;'
入力例:
>seq1
MSDGFHS*
>Seq2
MSDRFH*
出力例:
>seq1
MSDGFHS
>Seq2
MSDRFH
今、あなたはそれに慣れるべきですs///
。」三重固相線イディオム。上記のイディオムは、Perlプログラミング言語ファミリーのメンバーであるRakuで実行されているイディオムです-e
。で有効になっている場合は、strict
コード-p
を1行ずつ実行して、各行の$_
末尾にテーマ変数を自動的に印刷します。
2つの左スラッシュ文字の間で、正規表現は\*
(バックスラッシュでエスケープされた)リテラルアスタリスクを検索し、文字列の終わり$
幅が0のアサーションを検索します。 2つの右スラッシュ文字の間には何もないので、行末のアスタリスクは何もないものに置き換えられます(つまり削除されます)。
興味深いのは、Rakuの-ne
非自動印刷を1行ずつフラグに切り替えることができ、そのs///
イディオムは修正/削除することで選択した内容を1行ずつ返すことです(このような印刷ステートメントを追加したと仮定say
)。 :
raku -ne 's/ \* $ //.say;' test.fasta
Nil
「*」
Nil
「*」