Exceto o script IP2Dec e dec2ip, que precisa ser realizado apenas em parte do arquivo, ele deve funcionar. Aqui um exemplo de dec2ip que aplica a função somente em a primeira entrada da linha.
#!/bin/bash
dec2ip () {
local ip dec=$@
delim=""
for e in {3..0}
do
((octet = dec / (256 ** e) ))
((dec -= octet * 256 ** e))
ip+="$delim$octet"
delim=.
done
printf '%s' "$ip"
}
while read IP lon lat ; do
dec2ip $IP
printf " %s %s\n" "$lon" "$lat"
done
Uma maneira melhor seria escrever tudo de uma maneira curta em uma linguagem de nível superior. O seguinte script python 2.7 deve executar a tarefa que você precisa (não é otimizada para velocidade):
#!/usr/bin/python
import socket,struct
db=[]
for l in open("db.txt"):
fields=l.split();
db.append((int(fields[0]),int(fields[1]),fields[-2],fields[-1]))
for l in open("ip.txt"):
ip=struct.unpack('!I',socket.inet_aton(l))[0]
for e in db:
if e[0]<=ip<=e[1]:
print l.strip(),e[2],e[3]
break