私は最近awkを使ってfastaファイルを線形化しました。出力は完璧です。しかし、私のシーケンスにはキャレット(^)があります。このカラットを削除したいです。以下は私の試みです。助けてくれてありがとう。
>P1
MPPRRSIVEVKVLDVQKRRVPNKHYVYIIRVTWSSGATEAIYRRYSKFFDLQMQMLDKFP^MMEGGQKDPKQRIIPFLPGKILFRRSHIRDVAVKRLIPIDEYCKALIQLPPYISQCDEVLQ^MFFETRPEDLNPPKEEHIGKKKSGNDPTSVDPM
>P2
MAEVRKFTKRLSKPGTAAELRQSVSEAVRGSVVLEKAKLVEPLDYENVITQRKTQIYSDP^MLRDLLMFPMEDISISVIGRQRRTVQSTVPEDAEKRAQSLFVKECIKTYSTDWHVVNYKYE^MDFSGDFRMLPCKSLRPEKIPNHVFEIDEDCEK
>P3
GDDSEWLKLPVDQKCEHKLWKARLSGYEEALKIFQKIKDEKSPEWSKYLGLIKKFVTDS^MNAVVQLKGLEAALVYVENAHVAGKTTGEVVSGVVSKAKELGIEICLMYVEIE^MKGESVQEELLKGLDNKNPKIIVACIETLRKALS
私は以下を使用しようとしています:
$ sed '/s: ^// seq2.fa>seq3.fa
sed:e expression #1,char7: unkown command: '/'
上記のコードは助けてくれてありがとうというエラーを示しています。
答え1
sed 's/\^//' seq2.fa>seq3.fa
(各行の最初のカラットの削除)またはsed 's/\^//g' seq2.fa>seq3.fa
(各行のすべてのカラットの削除)が必要です。
答え2
^
ファイル内のすべての文字を削除するには、tr
次のように使用できます。
tr -d '^' <seq2.fa >seq3.fa
このtr
ユーティリティは、単一文字を操作するための最も効率的なツールです。文字を削除、交換、または「圧縮」(複数の連続文字を単一の文字に置き換えます)できます。ただし、どのロジックも使用できません。
シーケンス行から文字を削除し、fastaヘッダー行に触れたくない場合は、次のようにします。
sed '/^>/! s/\^//g' <seq2.fa >seq3.fa
これにより、文字で始まらないすべての行で代替コマンドが実行されますs/\^//g
(使用しようとしましたが、スラッシュ順序が間違っていると考えられます)>
。置換は、^
その文字が残っていなくなるまで繰り返し別の文字に置き換えて、行内のすべての文字を削除します。
エスケープする必要があります^
。それ以外の場合は、アンカーとして機能し、正規表現を行の先頭に固定します。
答え3
カラット()ではありません^
。 Windowsシステムでは、\r\n
行の終わりを示すためにキャリッジリターン(キャリッジリターンと改行文字)を使用します。これは\n
通常\r
、.を使用するのとは異なります^M
。例をご覧ください。
$ printf 'a\r\n' | cat -v
a^M
実際、私はあなたのシーケンスの1つに対してハッキングを実行し(削除した後^
にそのままにしましたM
)、nr
ほぼ完璧なヒットを見つけましたが、追加Mは空白でした。
私はあなたがWindowsシステム上でこのファイルに何かをしたと思いますが、その\r
内容にまたは。^M
各例が実際にどのように見えるかを確認してください^
。上記の爆発で確認されたように、それらも^M
削除したい実際のメチオニンではありません。したがって、次のようにしてみてください。M
^
tr -d '\r' < seq2.fa > seq3.fa
または、ファイルで行われた操作が原因で^
テキストが入力された場合は、M
次のすべてを削除します。
sed 's/\^M//g' seq2.fa > seq3.fa
ただ削除すると、余分な^
メチオニンのために間違ったシーケンスが生成されます。
答え4
使用幸せ(以前のPerl_6)
~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("\n\r")); $fh.put: $data;' | od -bc
0000000 061 012 015
1 \n \r
0000003
~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("\n")); $fh.put: $data;' | od -bc
0000000 061 012
1 \n
0000002
OPが直面する問題は、行末の不適切な処理が原因で発生しました。行末処理を正しく実行するには、このパラメーターを制御できる言語が必要です。幸いなことに、ラクはそのような言語です。
上記では、データはed$data
というファイルハンドルを持つ変数に格納されています。これ$fh
open
副詞引数は:nl-out
出力ターミネーター(\n\r
または)を設定するために使用され、正しいターミネーターは\n
データをstdoutに出力するために使用されます。$*OUT
したがって、FASTAファイルがある場合は、:nl-out("\n")
Unix / Linuxシステムでファイルを再度開くように正しいターミネーターを設定できます。もちろん、これに圧倒されることもあります。以下を参照してください。これはすべてです!
~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("thats-all-folks")); $fh.put: $data;' | od -bc
0000000 061 164 150 141 164 163 055 141 154 154 055 146 157 154 153 163
1 t h a t s - a l l - f o l k s
0000020
~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("")); $fh-eol.put: $data;' | od -bc
0000000 061
1
0000001
(類似した副詞パラメータは、:nl-in
ファイルを読み取るときに改行文字がどのように解釈されるかを制御するために使用されます。入力する幸せです。しかし、ラクは基本的に自動的に噛むのでそれほど重要ではありません.)
ページ参照:「ラクの改行処理」より多くの情報を知りたいです。