我有一个爆炸输出,并且希望获得最佳匹配,即通过确保查询是参考的最佳匹配来找到最佳匹配,反之亦然,基于第3列和第11列的值(对于列的阈值) 3> 40和第11列< 2e-04。
MnCG00500.1 Ma.15G248500.1 27.78 180 60 5 9 188 1 110 6e-04 41.2
MnCG00510.1 Ma.15G003800.1 87.88 33 4 0 6 38 3 35 2e-13 60.1
MnCG00510.1 Ma.10G208900.1 84.85 33 5 0 6 38 3 35 2e-12 57.0
MnCG00510.1 Ma.17G173700.1 84.85 33 5 0 6 38 3 35 9e-12 55.5
MnCG00280.1 Ma.11G114700.1 97.17 106 3 0 22 127 22 127 8e-65 210
MnCG00280.1 Ma.05G074900.1 98.18 55 1 0 420 474 11 65 3e-29 111
MnCG00280.1 Ma.20G242300.1 80.36 56 11 0 419 474 95 150 3e-22 95.1
MnCG00890.1 Ma.05G094500.1 89.55 67 7 0 321 387 4 70 1e-34 125
MnCG00890.1 Ma.01G201500.1 91.07 56 5 0 332 387 1 56 3e-28 107
我尝试过仅使用基于第12列的类似内衬,并尝试修改以适应我的条件
awk '{
a[$1]="0";b[$1]="";c[$2]="0";d[$2]="";
if (e[$1,$2]==0)
e[$1,$2]=$12;
else {
score=e[$1,$2]+$12;
e[$1,$2]=score
}
}
END{
for (i in a)
for (j in e) {
split(j,f,SUBSEP);
if (f[1]==i && e[j]>a[i]) {
a[i]=e[j];b[i]=f[2]
}
};
for (i in c) for (j in e) {
split(j,f,SUBSEP);
if (f[2]==i && e[j]>c[i]) {
c[i]=e[j];d[i]=f[1]
}
};
for (i in b)
if (b[i] in d && d[b[i]]==i)
print i"\t"b[i]"\t"a[i]"\t"c[b[i]]
}' result.blast
但是不起作用。
最后我需要像
这样的东西MnCG00500.1, Ma.15G248500.1, MnCG00500.1, no_match
MnCG00510.1, Ma.15G003800.1, match
MnCG00510.1, Ma.10G208900.1, match
MnCG00510.1, Ma.17G173700.1, match
MnCG00280.1, Ma.11G114700.1, match
MnCG00280.1, Ma.05G074900.1, match
MnCG00280.1, Ma.20G242300.1, match
MnCG00890.1, Ma.05G094500.1,MnCG00890.1, no match
MnCG00890.1, Ma.01G201500.1, match
答案 0 :(得分:1)
您不会从单次爆炸运行的输出中获得RBH。 收集来自目标数据库的最佳得分命中,然后针对查询数据库进行反击。 如果来自第二次爆炸的最佳命中与来自第一次爆炸的查询序列匹配,那么查询和目标序列是#34;互惠最佳命中"
只使用一个blast输出,你可以做的最多就是从目标数据库获取id以反击查询db。
希望有所帮助。也更小的E(xpect)值更好,所以你需要column_11< 2e-04
答案 1 :(得分:0)
输出文件中只有最佳匹配:
blastx -query myFile.fasta -db myDB -evalue 0.00001 -num_alignments 1 -outfmt "7 qseqid sseqid" | uniq > myResult.txt