約28000個のシーケンスを含むfastaファイルがあります。このシーケンスのヘッダーを別のファイルの行リストに置き換えたいと思います。例:
ファイル1:
sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPP.....
sp|P0ACF8|HNS_ECOLI
MSEALKILNNIRTLRAQ........
sp|P24232|HMP_ECOLI
MLDAQTIATVKATIPLLVET..........
ファイル2:
sp|B7UM99|TIR_ECO27OS=Escherichia coli
sp|P0ACF8|HNS_ECOLI=Human
sp|P24232|HMP_ECOLI=Flavohemoprotein
希望の出力:
sp|B7UM99|TIR_ECO27OS=Escherichia coli
MPIGNLGNNVNGNHLIPPAPP.....
sp|P0ACF8|HNS_ECOLI=Human
MSEALKILNNIRTLRAQ........
sp|P24232|HMP_ECOLI=Flavohemoprotein
MLDAQTIATVKATIPLLVET..........
答え1
次のように、sedコマンドとPasteコマンドを使用してこれを実行できます。
$ sed 's/$/\n/' file2 | paste -d ' ' file1 - | sed 's/^sp.* sp/sp/'
sp|B7UM99|TIR_ECO27OS=Escherichia coli
MPIGNLGNNVNGNHLIPPAPP.....
sp|P0ACF8|HNS_ECOLI=Human
MSEALKILNNIRTLRAQ........
sp|P24232|HMP_ECOLI=Flavohemoprotein
MLDAQTIATVKATIPLLVET..........
最初のsedは、各項目の後に空白行を追加して、貼り付ける短いファイルを準備します。これで、両方のファイルに同じ数の行とヘッダー(古いものと新しいもの)があるので、貼り付けコマンドを実行します。最後に、2番目のsedは古いヘッダーテキストを削除します。
シーケンス行には末尾のスペースがあります。削除が重要な場合は、結果を別のsedにパイプすることができます| sed 's/ $//'
。
答え2
GNUを介して実装sed
:
$ sed -e '/^sp|/{R file2' -e 'd}' file1
sp|B7UM99|TIR_ECO27OS=Escherichia coli
MPIGNLGNNVNGNHLIPPAPP.....
sp|P0ACF8|HNS_ECOLI=Human
MSEALKILNNIRTLRAQ........
sp|P24232|HMP_ECOLI=Flavohemoprotein
MLDAQTIATVKATIPLLVET..........
ここで、R file
コマンド(GNU非標準拡張)はfile
(いいえ(標準)はパターンd
スペースを捨てます。
-i
n位置を編集するオプションが追加されましたfile1
i
。
答え3
おそらく次のスクリプトが必要です。
#!/bin/bash
# Save the good lines
awk '{if($0 !~ "^sp")print > "result_1" }' < file_1
awk '{if($0 ~ "^sp")print > "result_2" }' < file_2
# Get number of lines in result_1 ( == nl in result_2 )
nl_file=$(wc -l result_1|cut -d' ' -f1)
# Prepare sorting of these files preceded by a number
seq 2 2 $(( ${nl_file} * 2 )) > numbered_file_1
seq 1 2 $(( ${nl_file} * 2 )) > numbered_file_2
# paste content of numbered_file_* and result_* side by side
paste -d ' ' numbered_file_1 result_1 > mergedfiles
paste -d ' ' numbered_file_2 result_2 >> mergedfiles
sort -n mergedfiles | sed 's/^[[:digit:]]\s\+//g'
答え4
長い年月が経っても、まだ古い質問に対する答えが出てくるのを見て嬉しいです!
おそらくawkを使用する方がはるかに簡単です。
$ awk '/sp/{getline nuhead <"file2";$0=nuhead}1' file1
sp|B7UM99|TIR_ECO27OS=Escherichia coli
MPIGNLGNNVNGNHLIPPAPP.....
sp|P0ACF8|HNS_ECOLI=Human
MSEALKILNNIRTLRAQ........
sp|P24232|HMP_ECOLI=Flavohemoprotein
MLDAQTIATVKATIPLLVET..........