![インデックスを照会してデータの値を見つける方法は? [コピー]](https://linux33.com/image/46002/%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E7%85%A7%E4%BC%9A%E3%81%97%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%80%A4%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
データ配列のリストがあり、そのインデックス(id)で値を見て、データ配列のインデックスIDに保存したいと思います。スプレッドシートVALUE LOOKUP関数でこれを行うことはできますが、まだこれを行うデータがたくさんあり、大量のデータセットの場合はスプレッドシート機能が高速ではないと思います。より速く実行できるスクリプトを教えてください。私のデータ配列、インデックスID、および提案された出力は次のとおりです。
データ配列
Id Value
1 10
2 20
3 30
4 40
6 60
8 80
10 100
索引
Id
1
2
3
4
5
6
7
8
9
10
11
12
13
出力は次のとおりです
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
また助けてくれてありがとう。
答え1
非常に高速なオープンソースのNoSQL Key-Valueリポジトリであるawkとredisの完全な組み合わせを試してください。http://redis.io詳細はこちら)。
awkを使用して2つのファイル(「data_array.txt」と「index.txt」)を解析し、redisコマンドを生成します。
2つのawkスクリプトの結果をbashにパイプして実行します。それだけです:-)
ステップバイステップ:
次のように、3行目から始まるデータファイルを解析してredis "SET"ステートメントを生成します。
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"
redis "SET"ステートメントをbashにパイプして実行します。
awk '{if (FNR > 2) \
print "redis-cli SET VALUE:" $1 " \"" $2"\""}' data_array.txt | bash
OK
OK
OK
OK
OK
OK
OK
次のように、3行目から始まるインデックスファイルを解析してredis "GET"ステートメントを生成します。
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
redis "GET"ステートメントをbashにパイプして実行します。
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)
楽しむ:-)
バニー
ツイートをサイトに
埋め込む
わざわざここに答えを投稿します。 Abrahamのサンプルデータは非常に透明なので、私の答えをすぐに理解できることを願っています。データUnixのvlookup関数例を見ると混乱しています...