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 =女性] [Unplacedscaffold]に置き換える必要があることを意味します。この目的のために、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