我有一個包含序列的檔案:
>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")
uj5u.com熱心網友回復:
將 awk 與空一起使用FS。這可能不適用于每個 awk 版本或任意長的序列:
$ awk 'BEGIN {
FS=OFS="" # process each char as an individual field
}
NR==FNR { # process the numbers file
a[$0] # 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
uj5u.com熱心網友回復:
使用 POSIX awk 并substr()處理字串索引:
awk '
FNR==NR {a[c ] = $0}
FNR!=NR && !/^[[:space:]]*[;>]|^[[:space:]]*$/ {
for (i in a) {
n=a[i]
$0 = substr($0, 1, n-1) "N" substr($0, n 1)
}
}
FNR!=NR' indexes.txt sequence.fasta
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445483.html
上一篇:合并兩個WIG檔案
