>
私は、各配列名が次の行の対応する配列を使用して識別される大きなタンパク質配列ファイルを持っています。
はい(引用符を無視):
>YAL003W EFB1 SGDID:S000000003, Chr I from 142174-142253,142620-143160, Genome Release 64-1-1, Verified ORF, "Translation elongation factor 1 beta; stimulates nucleotide exchange to regenerate EF-1 alpha-GTP for the next elongation cycle; part of the EF-1 complex, which facilitates binding of aminoacyl-tRNA to the ribosomal A site"
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*
ほとんどの名前テキストを削除して、次のように見せたい(引用符を無視)。
>YAL003W EFB1
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
FDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*
名前は1行だけで計算されますが、シーケンスは複数行で計算されるため、私の質問です。この問題をどのように解決できますか?
答え1
奇妙なソリューション
$ awk '/>/ { print $1, $2; next } { print }' aa
>YAL003W EFB1
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*
- />/1行で検索>
- next; awkファイルからパターンが読み込まれなくなりました。
答え2
以下はいくつかの回避策です。
grep
。このパターンは、>
空白ではなく2つの連続した文字列([^ ]+ [^ ]+
)または任意の文字()で.+
始まる行を検索します。各行の一致部分のみを印刷する理由は次のとおりです-o
。grep
$ grep -oP '^(>[^ ]+ [^ ]+|.+)' file.fa >YAL003W EFB1 MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS LDDLQQSIEEDEDHVQSTDIAAMQKL*
awk
$ awk '{if(/>/){print $1,$2}else{print}}' file.fa >YAL003W EFB1 MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS LDDLQQSIEEDEDHVQSTDIAAMQKL*
牛に似た一種の栄養
sed
$ sed -r 's/(>[^ ]+ [^ ]+).*/\1/' file.fa >YAL003W EFB1 MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS LDDLQQSIEEDEDHVQSTDIAAMQKL*
どの
sed
$ sed 's/\(>[^ ]* [^ ]*\).*/\1/' file.fa >YAL003W EFB1 MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS LDDLQQSIEEDEDHVQSTDIAAMQKL*
cut
$ cut -d ' ' -f 1,2 file.fa >YAL003W EFB1 MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS LDDLQQSIEEDEDHVQSTDIAAMQKL*
真珠。
$ perl -lane 'print "@F[0..1]"' file.fa >YAL003W EFB1 MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS LDDLQQSIEEDEDHVQSTDIAAMQKL*
オプションは次のとおりです。
l
:各入力行から末尾の改行を削除し、各印刷呼び出しに改行を追加します。a
: 空白の各入力行を配列@F
に分割します。n
:入力ファイルを1行ずつ読みます。e
:各行でこのスクリプトを実行します。
スクリプト自体は、最初と2番目のフィールドのみを印刷します。シーケンス行の場合、最初のフィールドである使用可能な唯一のフィールドのみを印刷します。これがフルラインです。