Use join
com um simples test
:
$ cat is-between.sh
#!/bin/bash
while read cato start stop pos; do
[ $start -le $pos -a $pos -le $stop ] && echo "$cato $start $stop"
done < <(join db test)
$ ./is-between.sh
1 6408 8000
2 44839 50247
Você tem dados relacionais: valores de chave em um arquivo correspondem a valores de chave em outro, linha por linha. join
é a ferramenta para juntar essas coisas. Execute join db test
e você perceberá que é o mesmo resultado que um SELECT * FROM db JOIN test on test.cato=db.cato
se os dados estiverem em um banco de dados.
Com isso em mãos, agora você tem linhas que colocam start, stop e pos em uma linha. Fazer um loop sobre estes, usando um test
para verificar o intervalo, é fácil.