fasta ファイルがあり、seq ID (説明行) を新しい拡張 ID に置き換えたいと考えています。 fasta ファイルの形式は次のとおりです。
>3C-assembly|contig_74
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_75
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_76
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
...................
次の形式で新しい fasta を実現したいと考えています。
>Scaffold_001 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_002 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_003 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
....................
つまり、たとえば、3C-assembly|contig_74 は、Scaffold_001 [Sex=Female] [Unplaced scaffold] に置き換えられることになります。この目的のために、私はこれら 2 つの IDS を接続する 2 つの列 (タブ区切り) を含むテキスト ファイルを作成しました。
3C-assembly|contig_74 Scaffold_001 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_75 Scaffold_002 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_76 Scaffold_003 [Sex=Female] [Unplaced scaffold]
......................
このテキストファイルを使用して fasta ファイル内の ID を置き換える方法をご存知ですか。ありがとうございます。
答え1
使用方法awk
:
awk -F'\t' '
NR==FNR{ a[$1]=$2; next }
/^>/{
id=a[substr($0, 2)]
if (id!=""){ print ">" id; next }
}
1
' textfile file.fasta
まず、マッピングを含むテキスト ファイルを読み取り、a
最初のフィールドをインデックスとして使用して、配列の 2 番目のフィールドを保存します。next
レコードにスキップします。
次に fasta ファイルを読み取ります。レコードが で始まる場合は、現在のレコード ( )>
から最初の文字を削除し、この値を配列インデックスとして使用して、配列から新しい ID を検索します。ID が空でない場合は、ID を出力し、レコードにスキップします。substr($0, 2)
>
next
1
現在のレコード (シーケンスまたは一致しない ID) を出力します。
答え2
awk -F'\t' '
NR==FNR { map[">"$1] = ">"$2; next }
$0 in map { $0 = map[$0] }
{ print }
' mapfile fastafile