como procurar o valor dos dados pelo índice de pesquisa? [duplicado]

1

Eu tenho uma lista de matriz de dados que eu quero procurar os valores pelo seu índice (id) e armazenar para o id do índice da matriz de dados. Eu posso fazer isso na função VALUE LOOKUP da planilha, mas ainda tenho muitos dados para fazer isso e não acho que a função de planilha eletrônica será rápida para grandes conjuntos de dados. Eu quero que você me ajude a me deixar saber o roteiro que pode fazer isso mais rápido. Minha matriz de dados, o ID do índice e a saída proposta são os seguintes.

matriz de dados

Id  Value 

1    10
2    20
3    30
4    40
6    60
8    80
10   100

índice

Id 

1
2
3
4
5
6
7
8
9
10
11
12
13

A saída será

ID    Value
1  10
2  20
3  30
4  40
5  NULL
6  60
7  NULL
8  80
9  NULL 
10 100
11  NULL
12  NULL
13  NULL

Obrigado por ajudar novamente.

    
por AiB 28.08.2013 / 12:01

1 resposta

0

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 ...

    
por 29.08.2013 / 03:17