awk 'NR==FNR {dat[NR]=$0;next} { for ( i in dat ) { split(dat[i],arr," ");tag=arr[1];min=arr[2];max=arr[3];if ($2==tag && $3 <= max && $3 >= min) { res[i]+=$1 } } } END { for (i in dat) { print dat[i]" "(res[i]!=0?res[i]:"0") } }' input ref
awk 'NR==FNR {
dat[NR]=$0;next
}
{ for ( i in dat ) {
split(dat[i],arr," ")
tag=arr[1];
min=arr[2];
max=arr[3];
if ($2==tag && $3 <= max && $3 >= min) {
res[i]+=$1
}
}
}
END {
for (i in dat) {
print dat[i]" "(res[i]!=0?res[i]:"0")
}
}' input ref
Pegue cada linha de input.txt e coloque-a em um array. Então pegue cada linha de ref.txt e use a função awk dividida em dados extras no array arr. A partir desta matriz, atingimos as variáveis tag, min e max. Cada linha da matriz dat é então verificada em relação aos critérios e a matriz é incrementada de acordo. No final, o dat é colocado em loop por meio da impressão dos dados, juntamente com a contagem de res.
resultado:
10 5900317 5900359 RNA1 - 4
10 282035 282125 RNA1 - 5
10 4134522 4134564 RNA1 - 0
10 5299783 5299910 RNA2 - 0