Experimente uma boa mistura de awk e redis (um armazenamento de valor-chave NoSQL de código aberto extremamente rápido. Consulte o link para obter detalhes).
Use o awk para analisar seus 2 arquivos ("data_array.txt" e "index.txt") e para gerar seus comandos redis.
Pipe o resultado dos 2 scripts awk no bash para executá-los. É isso: -)
Passo a passo:
Gere suas instruções "SET", redis, analisando o arquivo de dados, começando com a terceira linha, assim:
awk '{if (FNR > 2) \
print "redis-cli SET VALUE:" $1 " \"" $2"\""}' data_array.txt
redis-cli SET VALUE:1 "10"
redis-cli SET VALUE:2 "20"
redis-cli SET VALUE:3 "30"
redis-cli SET VALUE:4 "40"
redis-cli SET VALUE:6 "60"
redis-cli SET VALUE:8 "80"
redis-cli SET VALUE:10 "100"
Canalize suas instruções "SET" para o bash para executá-las:
awk '{if (FNR > 2) \
print "redis-cli SET VALUE:" $1 " \"" $2"\""}' data_array.txt | bash
OK
OK
OK
OK
OK
OK
OK
Gere suas instruções "GET" do redis analisando o arquivo de índice começando com a terceira linha assim:
awk '{if (FNR > 2) print "printf \"" $1 " \" && redis-cli GET VALUE:" $1}' index.txt
echo 1 && redis-cli GET VALUE:1
echo 2 && redis-cli GET VALUE:2
echo 3 && redis-cli GET VALUE:3
echo 4 && redis-cli GET VALUE:4
echo 5 && redis-cli GET VALUE:5
echo 6 && redis-cli GET VALUE:6
echo 7 && redis-cli GET VALUE:7
echo 8 && redis-cli GET VALUE:8
echo 9 && redis-cli GET VALUE:9
echo 10 && redis-cli GET VALUE:10
echo 11 && redis-cli GET VALUE:11
echo 12 && redis-cli GET VALUE:12
echo 13 && redis-cli GET VALUE:13
Pipe suas instruções "GET" do redis para o bash para executá-las:
awk '{if (FNR > 2) \
print "printf \"" $1 " \" && redis-cli GET VALUE:" $1}' index.txt |\
bash
1 "10"
2 "20"
3 "30"
4 "40"
5 (nil)
6 "60"
7 (nil)
8 "80"
9 (nil)
10 "100"
11 (nil)
12 (nil)
13 (nil)
Aproveite: -)
bernie
@Rahul Patil
@Gilles
Eu postei minha resposta aqui de propósito. Os dados de exemplo de Abraham são bem transparentes, portanto, espero que minha resposta seja rapidamente compreendida. Os dados na função vlookup no exemplo unix pareciam confusos para mim ...