【发布时间】:2014-06-10 05:54:35
【问题描述】:
我有一张有五列的表格。如果它们重叠,我想合并开始和结束列,并且具有相同的 RNAiclone 和 target_mRNA 名称。如果两个条目的开头是: (A) 1-10, 11-20 表示重叠范围;而 (B)1-10, 12-20 表示不重叠的范围。对于相似的 RNAiclone,RNAilength(nt) 相同。
输入.txt
RNAiclone RNAilength(nt) target_mRNA start end
siRNA1 10 mRNA1 1 10
siRNA1 10 mRNA1 11 20
siRNA1 10 mRNA1 17 30
siRNA1 10 mRNA2 18 19
siRNA2 20 mRNA2 1 10
siRNA2 20 mRNA2 9 100
预期输出.txt
RNAiclone RNAilength(nt) target_mRNA start end
siRNA1 10 mRNA1 1 30
siRNA1 10 mRNA2 18 19
siRNA2 20 mRNA2 1 100
程序.awk
BEGIN{
i=0;
s="";
m="";
OFS="\t";
}
{
if (s!=$1 && m!=$3){
if (s != "" && m!= ""){
combine(chr,s,m,i);
}
i=0;
s="";
}
s=$1;
m=$3;
chr[i,0]=$4;
chr[i,1]=$5;
i++
}
END{
combine(chr,s,m,i);
}
function combine(arr,s,m,i) {
j=0;
new[j,0]=arr[0,0];
new[j,1]=arr[0,1];
for (k=1;k<i;k++)
{
if ((arr[k,0]<=new[j,1])&&(arr[k,1]>=new[j,1])){
new[j,1]=arr[k,1];
}
else if (arr[k,0]>new[j,1]){
j++;
new[j,0]=arr[k,0];
new[j,1]=arr[k,1];
}
}
for (n=0;n<=j;n++){
print s,m,new[n,0],new[n,1]
}
}
我正在使用命令“wk -f program.awk input.txt > output.txt”运行脚本,但没有得到预期的结果。你能帮我改正剧本吗?非常感谢。
【问题讨论】:
-
有人在 3 个月前遇到过类似的问题,
extract overlapping regions。不过,您的要简单得多。如果没有其他人的话,今晚晚些时候会响起。