Bash Genomic Range Query
genomic_range_query() {
local _s=$1
local -n _p="$2"
local -n _q="$3"
local -n _out="$4"
_out=()
local _k _idx
for _idx in "${!_p[@]}"; do
local _pi=${_p[$_idx]} _qi=${_q[$_idx]}
local _len=$(( _qi - _pi + 1 ))
local _sub=${_s:_pi:_len}
if [[ "$_sub" == *A* ]]; then
_out[_idx]=1
elif [[ "$_sub" == *C* ]]; then
_out[_idx]=2
elif [[ "$_sub" == *G* ]]; then
_out[_idx]=3
else
_out[_idx]=4
fi
done
}
This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.