如何替换文件列表中特定位置的字符?

How to replace characters at specific positions from a file list?

我有一个包含序列的文件:

    >sequence
TAGGACTGAGGGCTGGACAGGGCTGCGGGAG

和另一个包含引用位置的数字:

3
6
11

我想得到一个包含 'N' 的新文件,而不是第二个文件中定义的位置的 A、C、G、T,例如:

    >sequence
TANGANTGAGNGCTGGACAGGGCTGCGGGAG

有没有一种方法可以使用 bash awk/sed 或者我应该使用来自 biopython 的 SeqIO 的 python 脚本?

编辑:

这是 python 脚本的开始:

from Bio import SeqIO
import sys
import string
unput1=raw_input("enter sequence:")
unput2=raw_input("enter position file:")
fasta_file=unput1
position_file=unput2
result_file="outfile.fasta"
nb_list=list()
with open(position_file) as f:
    for line in f:
        line=line.strip()
        headerline = line.split()
        position=headerline[0]
        position_list.add(position)
for record in SeqIO.parse(StringIO(data), "fasta"):
    if record.id in nb_list:
        seq_record[position_list]="N"
        SeqIO.write([seq_record], f, "fasta")

将 awk 与空 FS 结合使用。这可能不适用于每个 awk 版本或任意长的序列:

$ awk 'BEGIN {
    FS=OFS=""               # process each char as an individual field
}
NR==FNR {                   # process the numbers file
    a[[=10=]]                   # hash numbers to a hash
    next
}
/^[ACGT]/ {                 # process sequence file
    for(i=1;i<=NF;i++)      # itetate every field
        if(i in a)          # if i found in a
            $i="N"          # replace char with N
}1' no-file seq-file

输出:

    >sequence
TANGANTGAGNGCTGGACAGGGCTGCGGGAG

使用 POSIX awk 和 substr() 寻址字符串索引:

awk '
FNR==NR {a[c++] = [=10=]}
FNR!=NR && !/^[[:space:]]*[;>]|^[[:space:]]*$/ {
        for (i in a) {
            n=a[i]
            [=10=] = substr([=10=], 1, n-1) "N" substr([=10=], n+1)
        }

}
FNR!=NR' indexes.txt sequence.fasta