Eu não recomendaria isso em uma grande quantidade de dados, mas pensei em testar uma solução bash. Eu não sou muito bash-fluent , mas isso parece ser a maneira "óbvia" de lidar com as coisas, "falando em algoritmos". Isso basicamente itera sobre cada arquivo e procura o bom intervalo. Eu dei alguns detalhes nos comentários.
O script deve ser executado desta forma:
$ ./script.sh [salaries] [ranges]
O arquivo salaries contém os salários de Sam, John e Max, enquanto intervalos contém seus ranges e ranks (2000 a 4000 é vice, 4000 a 6000 é secretário, e assim em).
#!/bin/bash
test $# -ne 2 && exit 1
test ! -r "$1" -o ! -r "$2" && exit 2
# Open the salary file (3) and the ranges (4).
exec 3< "$1"
exec 4< "$2"
# Echo the salary headers.
read -d$'\n' headers <&3
echo "$headers" | tr -s ' '
# For each line in the salary file...
while read name salary; do
# Skip the ranges headers ("salary_min...").
read -d$'\n' skip <&4
# For each range...
while read min max rankname; do
# If the salary is within the range, print name and rank.
if [ "$salary" -ge $min -a "$salary" -lt $max ]; then
echo "$name $rankname"
fi
done <&4
# Reopen the range file for the next employee.
exec 4>&-
exec 4< "$2"
done <&3
exit 0
Observe que minhas verificações de intervalos são inclusivas no limite inferior, mas exclusivas no superior:
[ "$salary" -ge $min -a "$salary" -lt $max ]
Você pode querer mudar esta linha se não for o comportamento esperado. Eu também tentei abrir arquivos o mais raramente possível, mas como o bash não lida com busca de arquivos , eu ainda preciso fechar / reabrir o arquivo de intervalos regularmente. Para ser honesto, eu recomendaria uma implementação de nível um pouco menor, se você for lidar com arquivos muito grandes. C seria legal.