2017-10-09 10 views
1

誰かがこれらの線のそれぞれについて、次の形式追加はテキスト(bashのを使用して?)

sp|Q9NYW0|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

のエントリを持っている私のFASTAファイルを、編集する戦略を思い付くために私を助けてもらえ| _ |の間にあるアクセッション番号にテキスト「_REVERSED」を追加する必要があります。例えば、上記のエントリはなる:

sp|Q9NYW0_REVERSED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_REVERSED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

私は、これは簡単な質問ですけど、それはサンプルbashスクリプトを使用して達成することができると思いますが、私はこれに新しいですし、実際に任意のヘルプをお願い申し上げます。

答えて

1

確かにそれはawkで行うことができますが、sedと同じように簡単に行うことができます。

$ sed 's/\(^[^|]*|\)\([^|]*\)\(.*$\)/\1\2_RESERVED\3/' yourfile 
sp|Q9NYW0_RESERVED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_RESERVED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

本質的にあなたは、例えば、正常代替構文のマッチング部3つの後方参照\(...\)間に捕捉された文字の、例えばそれらのグループ)を使用していますあなたのケースでは

sed 's/match/replace/' 

、試合は我々が捕獲したい最初の後方参照で構成されています。\1(最初の後方参照)で逆replace入れ置き換えられます

\(^[^|]*|\) # match from beginning '^' everything not '|', with the '|' 

。それはあなたが必要としている"accession number + _RESERVED"を挿入\2_RESERVEDとしてreplaceに挿入されます

\([^|]*\)  # which just captures everything up to the next '|' 

:次に、我々は同様にアクセッション番号を集めます。 \1\2_RESERVED\3として一緒にフルreplaceを置く

\(.*$\)  # which just says grab everything that remains '.*$' 

:最後に、私たちはちょうどに沿って、他のすべてを収集しました。

バッシュソリューション

あなたはbashでこれを実行する必要がある場合、それは同じように簡単にフィールドを分割する'|'に設定IFS内部フィールドセパレータ)と簡単なreadループを使用して行うことができます。例:

$ while IFS=$'|' read a b c; do echo "${a}|${b}_RESERVED|${c}"; done <yourfile 
sp|Q9NYW0_RESERVED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_RESERVED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

質問がある場合は、私に教えてください。

1

正規表現の解は効率的かもしれませんが、理解するのは難しいでしょう。 awkの1つのすてきなことは、自然に入力をフィールドに分割し、それらのフィールドを出力する前にyou can manipulateのフィールドを分割することです。私は、これを簡単に入力/覚えて正規表現のアプローチよりも。

$ awk 'BEGIN {FS="|";OFS="|"} {$2=$2 "_REVERSED"}{print}' < t 
sp|Q9NYW0_REVERSED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_REVERSED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 
関連する問題